# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model
from msrest.exceptions import HttpOperationError


class AccessInformationContract(Model):
    """Tenant access information contract of the API Management service.

    :param id: Identifier.
    :type id: str
    :param primary_key: Primary access key. This property will not be filled
     on 'GET' operations! Use '/listSecrets' POST request to get the value.
    :type primary_key: str
    :param secondary_key: Secondary access key. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type secondary_key: str
    :param enabled: Determines whether direct access is enabled.
    :type enabled: bool
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'primary_key': {'key': 'primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, id: str=None, primary_key: str=None, secondary_key: str=None, enabled: bool=None, **kwargs) -> None:
        super(AccessInformationContract, self).__init__(**kwargs)
        self.id = id
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.enabled = enabled


class AccessInformationUpdateParameters(Model):
    """Tenant access information update parameters.

    :param enabled: Determines whether direct access is enabled.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(AccessInformationUpdateParameters, self).__init__(**kwargs)
        self.enabled = enabled


class AdditionalLocation(Model):
    """Description of an additional API Management resource location.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param location: Required. The location name of the additional region
     among Azure Data center regions.
    :type location: str
    :param sku: Required. SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in the additional location. Available only for
     Basic, Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service which is deployed in an Internal Virtual
     Network in a particular additional location. Available only for Basic,
     Standard and Premium SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration for
     the location.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Region.
    :vartype gateway_regional_url: str
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     this additional location. Default value: False .
    :type disable_gateway: bool
    """

    _validation = {
        'location': {'required': True},
        'sku': {'required': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
    }

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'public_ip_addresses': {'key': 'publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'gateway_regional_url': {'key': 'gatewayRegionalUrl', 'type': 'str'},
        'disable_gateway': {'key': 'disableGateway', 'type': 'bool'},
    }

    def __init__(self, *, location: str, sku, virtual_network_configuration=None, disable_gateway: bool=False, **kwargs) -> None:
        super(AdditionalLocation, self).__init__(**kwargs)
        self.location = location
        self.sku = sku
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.gateway_regional_url = None
        self.disable_gateway = disable_gateway


class Resource(Model):
    """The Resource definition.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
    }

    def __init__(self, **kwargs) -> None:
        super(Resource, self).__init__(**kwargs)
        self.id = None
        self.name = None
        self.type = None


class ApiContract(Resource):
    """Api details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'properties.sourceApiId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'properties.apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, **kwargs) -> None:
        super(ApiContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set


class ApiEntityBaseContract(Model):
    """API base contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, **kwargs) -> None:
        super(ApiEntityBaseContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required


class ApiContractProperties(ApiEntityBaseContract):
    """Api Entity Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'sourceApiId', 'type': 'str'},
        'display_name': {'key': 'displayName', 'type': 'str'},
        'service_url': {'key': 'serviceUrl', 'type': 'str'},
        'path': {'key': 'path', 'type': 'str'},
        'protocols': {'key': 'protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, **kwargs) -> None:
        super(ApiContractProperties, self).__init__(description=description, authentication_settings=authentication_settings, subscription_key_parameter_names=subscription_key_parameter_names, api_type=api_type, api_revision=api_revision, api_version=api_version, is_current=is_current, api_revision_description=api_revision_description, api_version_description=api_version_description, api_version_set_id=api_version_set_id, subscription_required=subscription_required, **kwargs)
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set


class ApiCreateOrUpdateParameter(Model):
    """API Create or Update Parameters.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    :param value: Content value when Importing an API.
    :type value: str
    :param format: Format of the Content in which the API is getting imported.
     Possible values include: 'wadl-xml', 'wadl-link-json', 'swagger-json',
     'swagger-link-json', 'wsdl', 'wsdl-link', 'openapi', 'openapi+json',
     'openapi-link', 'openapi+json-link'
    :type format: str or ~azure.mgmt.apimanagement.models.ContentFormat
    :param wsdl_selector: Criteria to limit import of WSDL to a subset of the
     document.
    :type wsdl_selector:
     ~azure.mgmt.apimanagement.models.ApiCreateOrUpdatePropertiesWsdlSelector
    :param soap_api_type: Type of Api to create.
     * `http` creates a SOAP to REST API
     * `soap` creates a SOAP pass-through API. Possible values include:
     'SoapToRest', 'SoapPassThrough'
    :type soap_api_type: str or ~azure.mgmt.apimanagement.models.SoapApiType
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'properties.sourceApiId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'properties.apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
        'value': {'key': 'properties.value', 'type': 'str'},
        'format': {'key': 'properties.format', 'type': 'str'},
        'wsdl_selector': {'key': 'properties.wsdlSelector', 'type': 'ApiCreateOrUpdatePropertiesWsdlSelector'},
        'soap_api_type': {'key': 'properties.apiType', 'type': 'str'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, value: str=None, format=None, wsdl_selector=None, soap_api_type=None, **kwargs) -> None:
        super(ApiCreateOrUpdateParameter, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set
        self.value = value
        self.format = format
        self.wsdl_selector = wsdl_selector
        self.soap_api_type = soap_api_type


class ApiCreateOrUpdatePropertiesWsdlSelector(Model):
    """Criteria to limit import of WSDL to a subset of the document.

    :param wsdl_service_name: Name of service to import from WSDL
    :type wsdl_service_name: str
    :param wsdl_endpoint_name: Name of endpoint(port) to import from WSDL
    :type wsdl_endpoint_name: str
    """

    _attribute_map = {
        'wsdl_service_name': {'key': 'wsdlServiceName', 'type': 'str'},
        'wsdl_endpoint_name': {'key': 'wsdlEndpointName', 'type': 'str'},
    }

    def __init__(self, *, wsdl_service_name: str=None, wsdl_endpoint_name: str=None, **kwargs) -> None:
        super(ApiCreateOrUpdatePropertiesWsdlSelector, self).__init__(**kwargs)
        self.wsdl_service_name = wsdl_service_name
        self.wsdl_endpoint_name = wsdl_endpoint_name


class ApiExportResult(Model):
    """API Export result.

    :param id: ResourceId of the API which was exported.
    :type id: str
    :param export_result_format: Format in which the Api Details are exported
     to the Storage Blob with Sas Key valid for 5 minutes. Possible values
     include: 'Swagger', 'Wsdl', 'Wadl', 'OpenApi'
    :type export_result_format: str or
     ~azure.mgmt.apimanagement.models.ExportResultFormat
    :param value: The object defining the schema of the exported Api Detail
    :type value: ~azure.mgmt.apimanagement.models.ApiExportResultValue
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'export_result_format': {'key': 'format', 'type': 'str'},
        'value': {'key': 'value', 'type': 'ApiExportResultValue'},
    }

    def __init__(self, *, id: str=None, export_result_format=None, value=None, **kwargs) -> None:
        super(ApiExportResult, self).__init__(**kwargs)
        self.id = id
        self.export_result_format = export_result_format
        self.value = value


class ApiExportResultValue(Model):
    """The object defining the schema of the exported Api Detail.

    :param link: Link to the Storage Blob containing the result of the export
     operation. The Blob Uri is only valid for 5 minutes.
    :type link: str
    """

    _attribute_map = {
        'link': {'key': 'link', 'type': 'str'},
    }

    def __init__(self, *, link: str=None, **kwargs) -> None:
        super(ApiExportResultValue, self).__init__(**kwargs)
        self.link = link


class ApiManagementServiceApplyNetworkConfigurationParameters(Model):
    """Parameter supplied to the Apply Network configuration operation.

    :param location: Location of the Api Management service to update for a
     multi-region service. For a service deployed in a single region, this
     parameter is not required.
    :type location: str
    """

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
    }

    def __init__(self, *, location: str=None, **kwargs) -> None:
        super(ApiManagementServiceApplyNetworkConfigurationParameters, self).__init__(**kwargs)
        self.location = location


class ApiManagementServiceBackupRestoreParameters(Model):
    """Parameters supplied to the Backup/Restore of an API Management service
    operation.

    All required parameters must be populated in order to send to Azure.

    :param storage_account: Required. Azure Cloud Storage account (used to
     place/retrieve the backup) name.
    :type storage_account: str
    :param access_key: Required. Azure Cloud Storage account (used to
     place/retrieve the backup) access key.
    :type access_key: str
    :param container_name: Required. Azure Cloud Storage blob container name
     used to place/retrieve the backup.
    :type container_name: str
    :param backup_name: Required. The name of the backup file to create.
    :type backup_name: str
    """

    _validation = {
        'storage_account': {'required': True},
        'access_key': {'required': True},
        'container_name': {'required': True},
        'backup_name': {'required': True},
    }

    _attribute_map = {
        'storage_account': {'key': 'storageAccount', 'type': 'str'},
        'access_key': {'key': 'accessKey', 'type': 'str'},
        'container_name': {'key': 'containerName', 'type': 'str'},
        'backup_name': {'key': 'backupName', 'type': 'str'},
    }

    def __init__(self, *, storage_account: str, access_key: str, container_name: str, backup_name: str, **kwargs) -> None:
        super(ApiManagementServiceBackupRestoreParameters, self).__init__(**kwargs)
        self.storage_account = storage_account
        self.access_key = access_key
        self.container_name = container_name
        self.backup_name = backup_name


class ApiManagementServiceBaseProperties(Model):
    """Base Properties of an API Management service resource description.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    """

    _validation = {
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
    }

    _attribute_map = {
        'notification_sender_email': {'key': 'notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'customProperties', 'type': '{str}'},
        'certificates': {'key': 'certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'apiVersionConstraint', 'type': 'ApiVersionConstraint'},
    }

    def __init__(self, *, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, **kwargs) -> None:
        super(ApiManagementServiceBaseProperties, self).__init__(**kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint


class ApiManagementServiceCheckNameAvailabilityParameters(Model):
    """Parameters supplied to the CheckNameAvailability operation.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. The name to check for availability.
    :type name: str
    """

    _validation = {
        'name': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name: str, **kwargs) -> None:
        super(ApiManagementServiceCheckNameAvailabilityParameters, self).__init__(**kwargs)
        self.name = name


class ApiManagementServiceGetSsoTokenResult(Model):
    """The response of the GetSsoToken operation.

    :param redirect_uri: Redirect URL to the Publisher Portal containing the
     SSO token.
    :type redirect_uri: str
    """

    _attribute_map = {
        'redirect_uri': {'key': 'redirectUri', 'type': 'str'},
    }

    def __init__(self, *, redirect_uri: str=None, **kwargs) -> None:
        super(ApiManagementServiceGetSsoTokenResult, self).__init__(**kwargs)
        self.redirect_uri = redirect_uri


class ApiManagementServiceIdentity(Model):
    """Identity properties of the Api Management service resource.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param type: Required. The type of identity used for the resource. The
     type 'SystemAssigned, UserAssigned' includes both an implicitly created
     identity and a set of user assigned identities. The type 'None' will
     remove any identities from the service. Possible values include:
     'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None'
    :type type: str or ~azure.mgmt.apimanagement.models.ApimIdentityType
    :ivar principal_id: The principal id of the identity.
    :vartype principal_id: str
    :ivar tenant_id: The client tenant id of the identity.
    :vartype tenant_id: str
    :param user_assigned_identities: The list of user identities associated
     with the resource. The user identity
     dictionary key references will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
     providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
    :type user_assigned_identities: dict[str,
     ~azure.mgmt.apimanagement.models.UserIdentityProperties]
    """

    _validation = {
        'type': {'required': True},
        'principal_id': {'readonly': True},
        'tenant_id': {'readonly': True},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'principal_id': {'key': 'principalId', 'type': 'str'},
        'tenant_id': {'key': 'tenantId', 'type': 'str'},
        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'},
    }

    def __init__(self, *, type, user_assigned_identities=None, **kwargs) -> None:
        super(ApiManagementServiceIdentity, self).__init__(**kwargs)
        self.type = type
        self.principal_id = None
        self.tenant_id = None
        self.user_assigned_identities = user_assigned_identities


class ApiManagementServiceNameAvailabilityResult(Model):
    """Response of the CheckNameAvailability operation.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar name_available: True if the name is available and can be used to
     create a new API Management service; otherwise false.
    :vartype name_available: bool
    :ivar message: If reason == invalid, provide the user with the reason why
     the given name is invalid, and provide the resource naming requirements so
     that the user can select a valid name. If reason == AlreadyExists, explain
     that <resourceName> is already in use, and direct them to select a
     different name.
    :vartype message: str
    :param reason: Invalid indicates the name provided does not match the
     resource provider’s naming requirements (incorrect length, unsupported
     characters, etc.)  AlreadyExists indicates that the name is already in use
     and is therefore unavailable. Possible values include: 'Valid', 'Invalid',
     'AlreadyExists'
    :type reason: str or
     ~azure.mgmt.apimanagement.models.NameAvailabilityReason
    """

    _validation = {
        'name_available': {'readonly': True},
        'message': {'readonly': True},
    }

    _attribute_map = {
        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
        'message': {'key': 'message', 'type': 'str'},
        'reason': {'key': 'reason', 'type': 'NameAvailabilityReason'},
    }

    def __init__(self, *, reason=None, **kwargs) -> None:
        super(ApiManagementServiceNameAvailabilityResult, self).__init__(**kwargs)
        self.name_available = None
        self.message = None
        self.reason = reason


class ApimResource(Model):
    """The Resource definition.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
    }

    def __init__(self, *, tags=None, **kwargs) -> None:
        super(ApimResource, self).__init__(**kwargs)
        self.id = None
        self.name = None
        self.type = None
        self.tags = tags


class ApiManagementServiceResource(ApimResource):
    """A single API Management service resource in List or Get response.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    :param publisher_email: Required. Publisher email.
    :type publisher_email: str
    :param publisher_name: Required. Publisher name.
    :type publisher_name: str
    :param sku: Required. SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :param identity: Managed service identity of the Api Management service.
    :type identity:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity
    :param location: Required. Resource location.
    :type location: str
    :ivar etag: ETag of the resource.
    :vartype etag: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'publisher_email': {'required': True, 'max_length': 100},
        'publisher_name': {'required': True, 'max_length': 100},
        'sku': {'required': True},
        'location': {'required': True},
        'etag': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
        'notification_sender_email': {'key': 'properties.notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'properties.targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'properties.createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'properties.gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'properties.gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'properties.portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'properties.managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'properties.scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'properties.developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'properties.hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'properties.privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'properties.virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'properties.additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'properties.customProperties', 'type': '{str}'},
        'certificates': {'key': 'properties.certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'properties.enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'properties.disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'properties.virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'properties.apiVersionConstraint', 'type': 'ApiVersionConstraint'},
        'publisher_email': {'key': 'properties.publisherEmail', 'type': 'str'},
        'publisher_name': {'key': 'properties.publisherName', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'identity': {'key': 'identity', 'type': 'ApiManagementServiceIdentity'},
        'location': {'key': 'location', 'type': 'str'},
        'etag': {'key': 'etag', 'type': 'str'},
    }

    def __init__(self, *, publisher_email: str, publisher_name: str, sku, location: str, tags=None, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, identity=None, **kwargs) -> None:
        super(ApiManagementServiceResource, self).__init__(tags=tags, **kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint
        self.publisher_email = publisher_email
        self.publisher_name = publisher_name
        self.sku = sku
        self.identity = identity
        self.location = location
        self.etag = None


class ApiManagementServiceSkuProperties(Model):
    """API Management service resource SKU properties.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. Name of the Sku. Possible values include:
     'Developer', 'Standard', 'Premium', 'Basic', 'Consumption'
    :type name: str or ~azure.mgmt.apimanagement.models.SkuType
    :param capacity: Required. Capacity of the SKU (number of deployed units
     of the SKU). For Consumption SKU capacity must be specified as 0.
    :type capacity: int
    """

    _validation = {
        'name': {'required': True},
        'capacity': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'capacity': {'key': 'capacity', 'type': 'int'},
    }

    def __init__(self, *, name, capacity: int, **kwargs) -> None:
        super(ApiManagementServiceSkuProperties, self).__init__(**kwargs)
        self.name = name
        self.capacity = capacity


class ApiManagementServiceUpdateParameters(ApimResource):
    """Parameter supplied to Update Api Management Service.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    :param publisher_email: Publisher email.
    :type publisher_email: str
    :param publisher_name: Publisher name.
    :type publisher_name: str
    :param sku: SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :param identity: Managed service identity of the Api Management service.
    :type identity:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity
    :ivar etag: ETag of the resource.
    :vartype etag: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'publisher_email': {'max_length': 100},
        'publisher_name': {'max_length': 100},
        'etag': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
        'notification_sender_email': {'key': 'properties.notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'properties.targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'properties.createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'properties.gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'properties.gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'properties.portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'properties.managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'properties.scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'properties.developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'properties.hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'properties.privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'properties.virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'properties.additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'properties.customProperties', 'type': '{str}'},
        'certificates': {'key': 'properties.certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'properties.enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'properties.disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'properties.virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'properties.apiVersionConstraint', 'type': 'ApiVersionConstraint'},
        'publisher_email': {'key': 'properties.publisherEmail', 'type': 'str'},
        'publisher_name': {'key': 'properties.publisherName', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'identity': {'key': 'identity', 'type': 'ApiManagementServiceIdentity'},
        'etag': {'key': 'etag', 'type': 'str'},
    }

    def __init__(self, *, tags=None, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, publisher_email: str=None, publisher_name: str=None, sku=None, identity=None, **kwargs) -> None:
        super(ApiManagementServiceUpdateParameters, self).__init__(tags=tags, **kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint
        self.publisher_email = publisher_email
        self.publisher_name = publisher_name
        self.sku = sku
        self.identity = identity
        self.etag = None


class ApiReleaseContract(Resource):
    """ApiRelease details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param api_id: Identifier of the API the release belongs to.
    :type api_id: str
    :ivar created_date_time: The time the API was released. The date conforms
     to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the ISO 8601
     standard.
    :vartype created_date_time: datetime
    :ivar updated_date_time: The time the API release was updated.
    :vartype updated_date_time: datetime
    :param notes: Release Notes
    :type notes: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'created_date_time': {'readonly': True},
        'updated_date_time': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'created_date_time': {'key': 'properties.createdDateTime', 'type': 'iso-8601'},
        'updated_date_time': {'key': 'properties.updatedDateTime', 'type': 'iso-8601'},
        'notes': {'key': 'properties.notes', 'type': 'str'},
    }

    def __init__(self, *, api_id: str=None, notes: str=None, **kwargs) -> None:
        super(ApiReleaseContract, self).__init__(**kwargs)
        self.api_id = api_id
        self.created_date_time = None
        self.updated_date_time = None
        self.notes = notes


class ApiRevisionContract(Model):
    """Summary of revision metadata.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar api_id: Identifier of the API Revision.
    :vartype api_id: str
    :ivar api_revision: Revision number of API.
    :vartype api_revision: str
    :ivar created_date_time: The time the API Revision was created. The date
     conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the
     ISO 8601 standard.
    :vartype created_date_time: datetime
    :ivar updated_date_time: The time the API Revision were updated. The date
     conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the
     ISO 8601 standard.
    :vartype updated_date_time: datetime
    :ivar description: Description of the API Revision.
    :vartype description: str
    :ivar private_url: Gateway URL for accessing the non-current API Revision.
    :vartype private_url: str
    :ivar is_online: Indicates if API revision is the current api revision.
    :vartype is_online: bool
    :ivar is_current: Indicates if API revision is accessible via the gateway.
    :vartype is_current: bool
    """

    _validation = {
        'api_id': {'readonly': True},
        'api_revision': {'readonly': True, 'max_length': 100, 'min_length': 1},
        'created_date_time': {'readonly': True},
        'updated_date_time': {'readonly': True},
        'description': {'readonly': True, 'max_length': 256},
        'private_url': {'readonly': True},
        'is_online': {'readonly': True},
        'is_current': {'readonly': True},
    }

    _attribute_map = {
        'api_id': {'key': 'apiId', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'created_date_time': {'key': 'createdDateTime', 'type': 'iso-8601'},
        'updated_date_time': {'key': 'updatedDateTime', 'type': 'iso-8601'},
        'description': {'key': 'description', 'type': 'str'},
        'private_url': {'key': 'privateUrl', 'type': 'str'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
    }

    def __init__(self, **kwargs) -> None:
        super(ApiRevisionContract, self).__init__(**kwargs)
        self.api_id = None
        self.api_revision = None
        self.created_date_time = None
        self.updated_date_time = None
        self.description = None
        self.private_url = None
        self.is_online = None
        self.is_current = None


class ApiRevisionInfoContract(Model):
    """Object used to create an API Revision or Version based on an existing API
    Revision.

    :param source_api_id: Resource identifier of API to be used to create the
     revision from.
    :type source_api_id: str
    :param api_version_name: Version identifier for the new API Version.
    :type api_version_name: str
    :param api_revision_description: Description of new API Revision.
    :type api_revision_description: str
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'api_version_name': {'max_length': 100},
        'api_revision_description': {'max_length': 256},
    }

    _attribute_map = {
        'source_api_id': {'key': 'sourceApiId', 'type': 'str'},
        'api_version_name': {'key': 'apiVersionName', 'type': 'str'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_set': {'key': 'apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, source_api_id: str=None, api_version_name: str=None, api_revision_description: str=None, api_version_set=None, **kwargs) -> None:
        super(ApiRevisionInfoContract, self).__init__(**kwargs)
        self.source_api_id = source_api_id
        self.api_version_name = api_version_name
        self.api_revision_description = api_revision_description
        self.api_version_set = api_version_set


class ApiTagResourceContractProperties(ApiEntityBaseContract):
    """API contract properties for the Tag Resources.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param id: API identifier in the form /apis/{apiId}.
    :type id: str
    :param name: API name.
    :type name: str
    :param service_url: Absolute URL of the backend service implementing this
     API.
    :type service_url: str
    :param path: Relative URL uniquely identifying this API and all of its
     resource paths within the API Management service instance. It is appended
     to the API endpoint base URL specified during the service instance
     creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 1},
        'path': {'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'service_url': {'key': 'serviceUrl', 'type': 'str'},
        'path': {'key': 'path', 'type': 'str'},
        'protocols': {'key': 'protocols', 'type': '[Protocol]'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, id: str=None, name: str=None, service_url: str=None, path: str=None, protocols=None, **kwargs) -> None:
        super(ApiTagResourceContractProperties, self).__init__(description=description, authentication_settings=authentication_settings, subscription_key_parameter_names=subscription_key_parameter_names, api_type=api_type, api_revision=api_revision, api_version=api_version, is_current=is_current, api_revision_description=api_revision_description, api_version_description=api_version_description, api_version_set_id=api_version_set_id, subscription_required=subscription_required, **kwargs)
        self.id = id
        self.name = name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols


class ApiUpdateContract(Model):
    """API update contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param display_name: API name.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API.
    :type service_url: str
    :param path: Relative URL uniquely identifying this API and all of its
     resource paths within the API Management service instance. It is appended
     to the API endpoint base URL specified during the service instance
     creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 1},
        'path': {'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, display_name: str=None, service_url: str=None, path: str=None, protocols=None, **kwargs) -> None:
        super(ApiUpdateContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols


class ApiVersionConstraint(Model):
    """Control Plane Apis version constraint for the API Management service.

    :param min_api_version: Limit control plane API calls to API Management
     service with version equal to or newer than this value.
    :type min_api_version: str
    """

    _attribute_map = {
        'min_api_version': {'key': 'minApiVersion', 'type': 'str'},
    }

    def __init__(self, *, min_api_version: str=None, **kwargs) -> None:
        super(ApiVersionConstraint, self).__init__(**kwargs)
        self.min_api_version = min_api_version


class ApiVersionSetContract(Resource):
    """Api Version Set Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    :param display_name: Required. Name of API Version Set
    :type display_name: str
    :param versioning_scheme: Required. An value that determines where the API
     Version identifer will be located in a HTTP request. Possible values
     include: 'Segment', 'Query', 'Header'
    :type versioning_scheme: str or
     ~azure.mgmt.apimanagement.models.VersioningScheme
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
        'display_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'versioning_scheme': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'version_query_name': {'key': 'properties.versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'properties.versionHeaderName', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'versioning_scheme': {'key': 'properties.versioningScheme', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, versioning_scheme, description: str=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetContract, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name
        self.display_name = display_name
        self.versioning_scheme = versioning_scheme


class ApiVersionSetContractDetails(Model):
    """An API Version Set contains the common configuration for a set of API
    Versions relating .

    :param id: Identifier for existing API Version Set. Omit this value to
     create a new Version Set.
    :type id: str
    :param name: The display Name of the API Version Set.
    :type name: str
    :param description: Description of API Version Set.
    :type description: str
    :param versioning_scheme: An value that determines where the API Version
     identifer will be located in a HTTP request. Possible values include:
     'Segment', 'Query', 'Header'
    :type versioning_scheme: str or ~azure.mgmt.apimanagement.models.enum
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'versioning_scheme': {'key': 'versioningScheme', 'type': 'str'},
        'version_query_name': {'key': 'versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'versionHeaderName', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, name: str=None, description: str=None, versioning_scheme=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetContractDetails, self).__init__(**kwargs)
        self.id = id
        self.name = name
        self.description = description
        self.versioning_scheme = versioning_scheme
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name


class ApiVersionSetEntityBase(Model):
    """Api Version set base parameters.

    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    """

    _validation = {
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'version_query_name': {'key': 'versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'versionHeaderName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetEntityBase, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name


class ApiVersionSetUpdateParameters(Model):
    """Parameters to update or create an Api Version Set Contract.

    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    :param display_name: Name of API Version Set
    :type display_name: str
    :param versioning_scheme: An value that determines where the API Version
     identifer will be located in a HTTP request. Possible values include:
     'Segment', 'Query', 'Header'
    :type versioning_scheme: str or
     ~azure.mgmt.apimanagement.models.VersioningScheme
    """

    _validation = {
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
        'display_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'version_query_name': {'key': 'properties.versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'properties.versionHeaderName', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'versioning_scheme': {'key': 'properties.versioningScheme', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, version_query_name: str=None, version_header_name: str=None, display_name: str=None, versioning_scheme=None, **kwargs) -> None:
        super(ApiVersionSetUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name
        self.display_name = display_name
        self.versioning_scheme = versioning_scheme


class AssociationContract(Resource):
    """Association entity details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param provisioning_state: Provisioning state. Possible values include:
     'created'
    :type provisioning_state: str or
     ~azure.mgmt.apimanagement.models.ProvisioningState
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'ProvisioningState'},
    }

    def __init__(self, *, provisioning_state=None, **kwargs) -> None:
        super(AssociationContract, self).__init__(**kwargs)
        self.provisioning_state = provisioning_state


class AuthenticationSettingsContract(Model):
    """API Authentication Settings.

    :param o_auth2: OAuth2 Authentication settings
    :type o_auth2:
     ~azure.mgmt.apimanagement.models.OAuth2AuthenticationSettingsContract
    :param openid: OpenID Connect Authentication Settings
    :type openid:
     ~azure.mgmt.apimanagement.models.OpenIdAuthenticationSettingsContract
    """

    _attribute_map = {
        'o_auth2': {'key': 'oAuth2', 'type': 'OAuth2AuthenticationSettingsContract'},
        'openid': {'key': 'openid', 'type': 'OpenIdAuthenticationSettingsContract'},
    }

    def __init__(self, *, o_auth2=None, openid=None, **kwargs) -> None:
        super(AuthenticationSettingsContract, self).__init__(**kwargs)
        self.o_auth2 = o_auth2
        self.openid = openid


class AuthorizationServerContract(Resource):
    """External OAuth authorization server settings.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    :param display_name: Required. User-friendly authorization server name.
    :type display_name: str
    :param client_registration_endpoint: Required. Optional reference to a
     page where client or app registration for this authorization server is
     performed. Contains absolute URL to entity being referenced.
    :type client_registration_endpoint: str
    :param authorization_endpoint: Required. OAuth authorization endpoint. See
     http://tools.ietf.org/html/rfc6749#section-3.2.
    :type authorization_endpoint: str
    :param grant_types: Required. Form of an authorization grant, which the
     client uses to request the access token.
    :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]
    :param client_id: Required. Client or app id registered with this
     authorization server.
    :type client_id: str
    :param client_secret: Client or app secret registered with this
     authorization server. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 50, 'min_length': 1},
        'client_registration_endpoint': {'required': True},
        'authorization_endpoint': {'required': True},
        'grant_types': {'required': True},
        'client_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authorization_methods': {'key': 'properties.authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'properties.clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'properties.tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'properties.tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'properties.supportState', 'type': 'bool'},
        'default_scope': {'key': 'properties.defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'properties.bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'properties.resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'properties.resourceOwnerPassword', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'client_registration_endpoint': {'key': 'properties.clientRegistrationEndpoint', 'type': 'str'},
        'authorization_endpoint': {'key': 'properties.authorizationEndpoint', 'type': 'str'},
        'grant_types': {'key': 'properties.grantTypes', 'type': '[str]'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, client_registration_endpoint: str, authorization_endpoint: str, grant_types, client_id: str, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=None, client_secret: str=None, **kwargs) -> None:
        super(AuthorizationServerContract, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>
        self.display_name = display_name
        self.client_registration_endpoint = client_registration_endpoint
        self.authorization_endpoint = authorization_endpoint
        self.grant_types = grant_types
        self.client_id = client_id
        self.client_secret = client_secret


class AuthorizationServerContractBaseProperties(Model):
    """External OAuth authorization server Update settings contract.

    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    """

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authorization_methods': {'key': 'authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'supportState', 'type': 'bool'},
        'default_scope': {'key': 'defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'resourceOwnerPassword', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=None, **kwargs) -> None:
        super(AuthorizationServerContractBaseProperties, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>


class AuthorizationServerUpdateContract(Resource):
    """External OAuth authorization server settings.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    :param display_name: User-friendly authorization server name.
    :type display_name: str
    :param client_registration_endpoint: Optional reference to a page where
     client or app registration for this authorization server is performed.
     Contains absolute URL to entity being referenced.
    :type client_registration_endpoint: str
    :param authorization_endpoint: OAuth authorization endpoint. See
     http://tools.ietf.org/html/rfc6749#section-3.2.
    :type authorization_endpoint: str
    :param grant_types: Form of an authorization grant, which the client uses
     to request the access token.
    :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]
    :param client_id: Client or app id registered with this authorization
     server.
    :type client_id: str
    :param client_secret: Client or app secret registered with this
     authorization server. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'max_length': 50, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authorization_methods': {'key': 'properties.authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'properties.clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'properties.tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'properties.tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'properties.supportState', 'type': 'bool'},
        'default_scope': {'key': 'properties.defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'properties.bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'properties.resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'properties.resourceOwnerPassword', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'client_registration_endpoint': {'key': 'properties.clientRegistrationEndpoint', 'type': 'str'},
        'authorization_endpoint': {'key': 'properties.authorizationEndpoint', 'type': 'str'},
        'grant_types': {'key': 'properties.grantTypes', 'type': '[str]'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=<PASSWORD>, display_name: str=None, client_registration_endpoint: str=None, authorization_endpoint: str=None, grant_types=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(AuthorizationServerUpdateContract, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>
        self.display_name = display_name
        self.client_registration_endpoint = client_registration_endpoint
        self.authorization_endpoint = authorization_endpoint
        self.grant_types = grant_types
        self.client_id = client_id
        self.client_secret = client_secret


class BackendAuthorizationHeaderCredentials(Model):
    """Authorization header information.

    All required parameters must be populated in order to send to Azure.

    :param scheme: Required. Authentication Scheme name.
    :type scheme: str
    :param parameter: Required. Authentication Parameter value.
    :type parameter: str
    """

    _validation = {
        'scheme': {'required': True, 'max_length': 100, 'min_length': 1},
        'parameter': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'scheme': {'key': 'scheme', 'type': 'str'},
        'parameter': {'key': 'parameter', 'type': 'str'},
    }

    def __init__(self, *, scheme: str, parameter: str, **kwargs) -> None:
        super(BackendAuthorizationHeaderCredentials, self).__init__(**kwargs)
        self.scheme = scheme
        self.parameter = parameter


class BackendBaseParameters(Model):
    """Backend entity base Parameter set.

    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    """

    _validation = {
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'title': {'key': 'title', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'resource_id': {'key': 'resourceId', 'type': 'str'},
        'properties': {'key': 'properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'tls', 'type': 'BackendTlsProperties'},
    }

    def __init__(self, *, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, **kwargs) -> None:
        super(BackendBaseParameters, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls


class BackendContract(Resource):
    """Backend details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    :param url: Required. Runtime Url of the Backend.
    :type url: str
    :param protocol: Required. Backend communication protocol. Possible values
     include: 'http', 'soap'
    :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
        'url': {'required': True, 'max_length': 2000, 'min_length': 1},
        'protocol': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
        'properties': {'key': 'properties.properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'properties.credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'properties.proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'properties.tls', 'type': 'BackendTlsProperties'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'protocol': {'key': 'properties.protocol', 'type': 'str'},
    }

    def __init__(self, *, url: str, protocol, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, **kwargs) -> None:
        super(BackendContract, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls
        self.url = url
        self.protocol = protocol


class BackendCredentialsContract(Model):
    """Details of the Credentials used to connect to Backend.

    :param certificate: List of Client Certificate Thumbprint.
    :type certificate: list[str]
    :param query: Query Parameter description.
    :type query: dict[str, list[str]]
    :param header: Header Parameter description.
    :type header: dict[str, list[str]]
    :param authorization: Authorization header authentication
    :type authorization:
     ~azure.mgmt.apimanagement.models.BackendAuthorizationHeaderCredentials
    """

    _validation = {
        'certificate': {'max_items': 32},
    }

    _attribute_map = {
        'certificate': {'key': 'certificate', 'type': '[str]'},
        'query': {'key': 'query', 'type': '{[str]}'},
        'header': {'key': 'header', 'type': '{[str]}'},
        'authorization': {'key': 'authorization', 'type': 'BackendAuthorizationHeaderCredentials'},
    }

    def __init__(self, *, certificate=None, query=None, header=None, authorization=None, **kwargs) -> None:
        super(BackendCredentialsContract, self).__init__(**kwargs)
        self.certificate = certificate
        self.query = query
        self.header = header
        self.authorization = authorization


class BackendProperties(Model):
    """Properties specific to the Backend Type.

    :param service_fabric_cluster: Backend Service Fabric Cluster Properties
    :type service_fabric_cluster:
     ~azure.mgmt.apimanagement.models.BackendServiceFabricClusterProperties
    """

    _attribute_map = {
        'service_fabric_cluster': {'key': 'serviceFabricCluster', 'type': 'BackendServiceFabricClusterProperties'},
    }

    def __init__(self, *, service_fabric_cluster=None, **kwargs) -> None:
        super(BackendProperties, self).__init__(**kwargs)
        self.service_fabric_cluster = service_fabric_cluster


class BackendProxyContract(Model):
    """Details of the Backend WebProxy Server to use in the Request to Backend.

    All required parameters must be populated in order to send to Azure.

    :param url: Required. WebProxy Server AbsoluteUri property which includes
     the entire URI stored in the Uri instance, including all fragments and
     query strings.
    :type url: str
    :param username: Username to connect to the WebProxy server
    :type username: str
    :param password: Password to connect to the WebProxy Server
    :type password: str
    """

    _validation = {
        'url': {'required': True, 'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'url': {'key': 'url', 'type': 'str'},
        'username': {'key': 'username', 'type': 'str'},
        'password': {'key': 'password', 'type': 'str'},
    }

    def __init__(self, *, url: str, username: str=None, password: str=<PASSWORD>, **kwargs) -> None:
        super(BackendProxyContract, self).__init__(**kwargs)
        self.url = url
        self.username = username
        self.password = password


class BackendReconnectContract(Resource):
    """Reconnect request parameters.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param after: Duration in ISO8601 format after which reconnect will be
     initiated. Minimum duration of the Reconnect is PT2M.
    :type after: timedelta
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'after': {'key': 'properties.after', 'type': 'duration'},
    }

    def __init__(self, *, after=None, **kwargs) -> None:
        super(BackendReconnectContract, self).__init__(**kwargs)
        self.after = after


class BackendServiceFabricClusterProperties(Model):
    """Properties of the Service Fabric Type Backend.

    All required parameters must be populated in order to send to Azure.

    :param client_certificatethumbprint: Required. The client certificate
     thumbprint for the management endpoint.
    :type client_certificatethumbprint: str
    :param max_partition_resolution_retries: Maximum number of retries while
     attempting resolve the partition.
    :type max_partition_resolution_retries: int
    :param management_endpoints: Required. The cluster management endpoint.
    :type management_endpoints: list[str]
    :param server_certificate_thumbprints: Thumbprints of certificates cluster
     management service uses for tls communication
    :type server_certificate_thumbprints: list[str]
    :param server_x509_names: Server X509 Certificate Names Collection
    :type server_x509_names:
     list[~azure.mgmt.apimanagement.models.X509CertificateName]
    """

    _validation = {
        'client_certificatethumbprint': {'required': True},
        'management_endpoints': {'required': True},
    }

    _attribute_map = {
        'client_certificatethumbprint': {'key': 'clientCertificatethumbprint', 'type': 'str'},
        'max_partition_resolution_retries': {'key': 'maxPartitionResolutionRetries', 'type': 'int'},
        'management_endpoints': {'key': 'managementEndpoints', 'type': '[str]'},
        'server_certificate_thumbprints': {'key': 'serverCertificateThumbprints', 'type': '[str]'},
        'server_x509_names': {'key': 'serverX509Names', 'type': '[X509CertificateName]'},
    }

    def __init__(self, *, client_certificatethumbprint: str, management_endpoints, max_partition_resolution_retries: int=None, server_certificate_thumbprints=None, server_x509_names=None, **kwargs) -> None:
        super(BackendServiceFabricClusterProperties, self).__init__(**kwargs)
        self.client_certificatethumbprint = client_certificatethumbprint
        self.max_partition_resolution_retries = max_partition_resolution_retries
        self.management_endpoints = management_endpoints
        self.server_certificate_thumbprints = server_certificate_thumbprints
        self.server_x509_names = server_x509_names


class BackendTlsProperties(Model):
    """Properties controlling TLS Certificate Validation.

    :param validate_certificate_chain: Flag indicating whether SSL certificate
     chain validation should be done when using self-signed certificates for
     this backend host. Default value: True .
    :type validate_certificate_chain: bool
    :param validate_certificate_name: Flag indicating whether SSL certificate
     name validation should be done when using self-signed certificates for
     this backend host. Default value: True .
    :type validate_certificate_name: bool
    """

    _attribute_map = {
        'validate_certificate_chain': {'key': 'validateCertificateChain', 'type': 'bool'},
        'validate_certificate_name': {'key': 'validateCertificateName', 'type': 'bool'},
    }

    def __init__(self, *, validate_certificate_chain: bool=True, validate_certificate_name: bool=True, **kwargs) -> None:
        super(BackendTlsProperties, self).__init__(**kwargs)
        self.validate_certificate_chain = validate_certificate_chain
        self.validate_certificate_name = validate_certificate_name


class BackendUpdateParameters(Model):
    """Backend update parameters.

    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    :param url: Runtime Url of the Backend.
    :type url: str
    :param protocol: Backend communication protocol. Possible values include:
     'http', 'soap'
    :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol
    """

    _validation = {
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
        'url': {'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
        'properties': {'key': 'properties.properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'properties.credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'properties.proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'properties.tls', 'type': 'BackendTlsProperties'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'protocol': {'key': 'properties.protocol', 'type': 'str'},
    }

    def __init__(self, *, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, url: str=None, protocol=None, **kwargs) -> None:
        super(BackendUpdateParameters, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls
        self.url = url
        self.protocol = protocol


class BodyDiagnosticSettings(Model):
    """Body logging settings.

    :param bytes: Number of request body bytes to log.
    :type bytes: int
    """

    _validation = {
        'bytes': {'maximum': 8192},
    }

    _attribute_map = {
        'bytes': {'key': 'bytes', 'type': 'int'},
    }

    def __init__(self, *, bytes: int=None, **kwargs) -> None:
        super(BodyDiagnosticSettings, self).__init__(**kwargs)
        self.bytes = bytes


class CacheContract(Resource):
    """Cache details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Cache description
    :type description: str
    :param connection_string: Required. Runtime connection string to cache
    :type connection_string: str
    :param resource_id: Original uri of entity in external system cache points
     to
    :type resource_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 2000},
        'connection_string': {'required': True, 'max_length': 300},
        'resource_id': {'max_length': 2000},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, connection_string: str, description: str=None, resource_id: str=None, **kwargs) -> None:
        super(CacheContract, self).__init__(**kwargs)
        self.description = description
        self.connection_string = connection_string
        self.resource_id = resource_id


class CacheUpdateParameters(Model):
    """Cache update details.

    :param description: Cache description
    :type description: str
    :param connection_string: Runtime connection string to cache
    :type connection_string: str
    :param resource_id: Original uri of entity in external system cache points
     to
    :type resource_id: str
    """

    _validation = {
        'description': {'max_length': 2000},
        'connection_string': {'max_length': 300},
        'resource_id': {'max_length': 2000},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, connection_string: str=None, resource_id: str=None, **kwargs) -> None:
        super(CacheUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.connection_string = connection_string
        self.resource_id = resource_id


class CertificateConfiguration(Model):
    """Certificate configuration which consist of non-trusted intermediates and
    root certificates.

    All required parameters must be populated in order to send to Azure.

    :param encoded_certificate: Base64 Encoded certificate.
    :type encoded_certificate: str
    :param certificate_password: <PASSWORD>.
    :type certificate_password: str
    :param store_name: Required. The
     System.Security.Cryptography.x509certificates.StoreName certificate store
     location. Only Root and CertificateAuthority are valid locations. Possible
     values include: 'CertificateAuthority', 'Root'
    :type store_name: str or ~azure.mgmt.apimanagement.models.enum
    :param certificate: Certificate information.
    :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation
    """

    _validation = {
        'store_name': {'required': True},
    }

    _attribute_map = {
        'encoded_certificate': {'key': 'encodedCertificate', 'type': 'str'},
        'certificate_password': {'key': 'certificatePassword', 'type': 'str'},
        'store_name': {'key': 'storeName', 'type': 'str'},
        'certificate': {'key': 'certificate', 'type': 'CertificateInformation'},
    }

    def __init__(self, *, store_name, encoded_certificate: str=None, certificate_password: str=None, certificate=None, **kwargs) -> None:
        super(CertificateConfiguration, self).__init__(**kwargs)
        self.encoded_certificate = encoded_certificate
        self.certificate_password = <PASSWORD>
        self.store_name = store_name
        self.certificate = certificate


class CertificateContract(Resource):
    """Certificate details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param subject: Required. Subject attribute of the certificate.
    :type subject: str
    :param thumbprint: Required. Thumbprint of the certificate.
    :type thumbprint: str
    :param expiration_date: Required. Expiration date of the certificate. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'subject': {'required': True},
        'thumbprint': {'required': True},
        'expiration_date': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
    }

    def __init__(self, *, subject: str, thumbprint: str, expiration_date, **kwargs) -> None:
        super(CertificateContract, self).__init__(**kwargs)
        self.subject = subject
        self.thumbprint = thumbprint
        self.expiration_date = expiration_date


class CertificateCreateOrUpdateParameters(Model):
    """Certificate create or update details.

    All required parameters must be populated in order to send to Azure.

    :param data: Required. Base 64 encoded certificate using the
     application/x-pkcs12 representation.
    :type data: str
    :param password: Required. Password for the Certificate
    :type password: str
    """

    _validation = {
        'data': {'required': True},
        'password': {'required': True},
    }

    _attribute_map = {
        'data': {'key': 'properties.data', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
    }

    def __init__(self, *, data: str, password: str, **kwargs) -> None:
        super(CertificateCreateOrUpdateParameters, self).__init__(**kwargs)
        self.data = data
        self.password = password


class CertificateInformation(Model):
    """SSL certificate information.

    All required parameters must be populated in order to send to Azure.

    :param expiry: Required. Expiration date of the certificate. The date
     conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by
     the ISO 8601 standard.
    :type expiry: datetime
    :param thumbprint: Required. Thumbprint of the certificate.
    :type thumbprint: str
    :param subject: Required. Subject of the certificate.
    :type subject: str
    """

    _validation = {
        'expiry': {'required': True},
        'thumbprint': {'required': True},
        'subject': {'required': True},
    }

    _attribute_map = {
        'expiry': {'key': 'expiry', 'type': 'iso-8601'},
        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
        'subject': {'key': 'subject', 'type': 'str'},
    }

    def __init__(self, *, expiry, thumbprint: str, subject: str, **kwargs) -> None:
        super(CertificateInformation, self).__init__(**kwargs)
        self.expiry = expiry
        self.thumbprint = thumbprint
        self.subject = subject


class ClientSecretContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param client_secret: Client or app secret used in IdentityProviders, Aad,
     OpenID or OAuth.
    :type client_secret: str
    """

    _attribute_map = {
        'client_secret': {'key': 'clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_secret: str=None, **kwargs) -> None:
        super(ClientSecretContract, self).__init__(**kwargs)
        self.client_secret = client_secret


class CloudError(Model):
    """CloudError.
    """

    _attribute_map = {
    }


class ConnectivityStatusContract(Model):
    """Details about connectivity to a resource.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. The hostname of the resource which the service
     depends on. This can be the database, storage or any other azure resource
     on which the service depends upon.
    :type name: str
    :param status: Required. Resource Connectivity Status Type identifier.
     Possible values include: 'initializing', 'success', 'failure'
    :type status: str or
     ~azure.mgmt.apimanagement.models.ConnectivityStatusType
    :param error: Error details of the connectivity to the resource.
    :type error: str
    :param last_updated: Required. The date when the resource connectivity
     status was last updated. This status should be updated every 15 minutes.
     If this status has not been updated, then it means that the service has
     lost network connectivity to the resource, from inside the Virtual
     Network.The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type last_updated: datetime
    :param last_status_change: Required. The date when the resource
     connectivity status last Changed from success to failure or vice-versa.
     The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type last_status_change: datetime
    """

    _validation = {
        'name': {'required': True, 'min_length': 1},
        'status': {'required': True},
        'last_updated': {'required': True},
        'last_status_change': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'status': {'key': 'status', 'type': 'str'},
        'error': {'key': 'error', 'type': 'str'},
        'last_updated': {'key': 'lastUpdated', 'type': 'iso-8601'},
        'last_status_change': {'key': 'lastStatusChange', 'type': 'iso-8601'},
    }

    def __init__(self, *, name: str, status, last_updated, last_status_change, error: str=None, **kwargs) -> None:
        super(ConnectivityStatusContract, self).__init__(**kwargs)
        self.name = name
        self.status = status
        self.error = error
        self.last_updated = last_updated
        self.last_status_change = last_status_change


class DeployConfigurationParameters(Model):
    """Deploy Tenant Configuration Contract.

    All required parameters must be populated in order to send to Azure.

    :param branch: Required. The name of the Git branch from which the
     configuration is to be deployed to the configuration database.
    :type branch: str
    :param force: The value enforcing deleting subscriptions to products that
     are deleted in this update.
    :type force: bool
    """

    _validation = {
        'branch': {'required': True},
    }

    _attribute_map = {
        'branch': {'key': 'properties.branch', 'type': 'str'},
        'force': {'key': 'properties.force', 'type': 'bool'},
    }

    def __init__(self, *, branch: str, force: bool=None, **kwargs) -> None:
        super(DeployConfigurationParameters, self).__init__(**kwargs)
        self.branch = branch
        self.force = force


class DiagnosticContract(Resource):
    """Diagnostic details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param always_log: Specifies for what type of messages sampling settings
     should not apply. Possible values include: 'allErrors'
    :type always_log: str or ~azure.mgmt.apimanagement.models.AlwaysLog
    :param logger_id: Required. Resource Id of a target logger.
    :type logger_id: str
    :param sampling: Sampling settings for Diagnostic.
    :type sampling: ~azure.mgmt.apimanagement.models.SamplingSettings
    :param frontend: Diagnostic settings for incoming/outgoing HTTP messages
     to the Gateway.
    :type frontend:
     ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings
    :param backend: Diagnostic settings for incoming/outgoing HTTP messages to
     the Backend
    :type backend: ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings
    :param log_client_ip: Log the ClientIP. Default is false.
    :type log_client_ip: bool
    :param http_correlation_protocol: Sets correlation protocol to use for
     Application Insights diagnostics. Possible values include: 'None',
     'Legacy', 'W3C'
    :type http_correlation_protocol: str or
     ~azure.mgmt.apimanagement.models.HttpCorrelationProtocol
    :param verbosity: The verbosity level applied to traces emitted by trace
     policies. Possible values include: 'verbose', 'information', 'error'
    :type verbosity: str or ~azure.mgmt.apimanagement.models.Verbosity
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'logger_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'always_log': {'key': 'properties.alwaysLog', 'type': 'str'},
        'logger_id': {'key': 'properties.loggerId', 'type': 'str'},
        'sampling': {'key': 'properties.sampling', 'type': 'SamplingSettings'},
        'frontend': {'key': 'properties.frontend', 'type': 'PipelineDiagnosticSettings'},
        'backend': {'key': 'properties.backend', 'type': 'PipelineDiagnosticSettings'},
        'log_client_ip': {'key': 'properties.logClientIp', 'type': 'bool'},
        'http_correlation_protocol': {'key': 'properties.httpCorrelationProtocol', 'type': 'str'},
        'verbosity': {'key': 'properties.verbosity', 'type': 'str'},
    }

    def __init__(self, *, logger_id: str, always_log=None, sampling=None, frontend=None, backend=None, log_client_ip: bool=None, http_correlation_protocol=None, verbosity=None, **kwargs) -> None:
        super(DiagnosticContract, self).__init__(**kwargs)
        self.always_log = always_log
        self.logger_id = logger_id
        self.sampling = sampling
        self.frontend = frontend
        self.backend = backend
        self.log_client_ip = log_client_ip
        self.http_correlation_protocol = http_correlation_protocol
        self.verbosity = verbosity


class EmailTemplateContract(Resource):
    """Email Template details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param subject: Required. Subject of the Template.
    :type subject: str
    :param body: Required. Email Template Body. This should be a valid
     XDocument
    :type body: str
    :param title: Title of the Template.
    :type title: str
    :param description: Description of the Email Template.
    :type description: str
    :ivar is_default: Whether the template is the default template provided by
     Api Management or has been edited.
    :vartype is_default: bool
    :param parameters: Email Template Parameter values.
    :type parameters:
     list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'subject': {'required': True, 'max_length': 1000, 'min_length': 1},
        'body': {'required': True, 'min_length': 1},
        'is_default': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'body': {'key': 'properties.body', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'is_default': {'key': 'properties.isDefault', 'type': 'bool'},
        'parameters': {'key': 'properties.parameters', 'type': '[EmailTemplateParametersContractProperties]'},
    }

    def __init__(self, *, subject: str, body: str, title: str=None, description: str=None, parameters=None, **kwargs) -> None:
        super(EmailTemplateContract, self).__init__(**kwargs)
        self.subject = subject
        self.body = body
        self.title = title
        self.description = description
        self.is_default = None
        self.parameters = parameters


class EmailTemplateParametersContractProperties(Model):
    """Email Template Parameter contract.

    :param name: Template parameter name.
    :type name: str
    :param title: Template parameter title.
    :type title: str
    :param description: Template parameter description.
    :type description: str
    """

    _validation = {
        'name': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'title': {'max_length': 4096, 'min_length': 1},
        'description': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'title': {'key': 'title', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
    }

    def __init__(self, *, name: str=None, title: str=None, description: str=None, **kwargs) -> None:
        super(EmailTemplateParametersContractProperties, self).__init__(**kwargs)
        self.name = name
        self.title = title
        self.description = description


class EmailTemplateUpdateParameters(Model):
    """Email Template update Parameters.

    :param subject: Subject of the Template.
    :type subject: str
    :param title: Title of the Template.
    :type title: str
    :param description: Description of the Email Template.
    :type description: str
    :param body: Email Template Body. This should be a valid XDocument
    :type body: str
    :param parameters: Email Template Parameter values.
    :type parameters:
     list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties]
    """

    _validation = {
        'subject': {'max_length': 1000, 'min_length': 1},
        'body': {'min_length': 1},
    }

    _attribute_map = {
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'body': {'key': 'properties.body', 'type': 'str'},
        'parameters': {'key': 'properties.parameters', 'type': '[EmailTemplateParametersContractProperties]'},
    }

    def __init__(self, *, subject: str=None, title: str=None, description: str=None, body: str=None, parameters=None, **kwargs) -> None:
        super(EmailTemplateUpdateParameters, self).__init__(**kwargs)
        self.subject = subject
        self.title = title
        self.description = description
        self.body = body
        self.parameters = parameters


class ErrorFieldContract(Model):
    """Error Field contract.

    :param code: Property level error code.
    :type code: str
    :param message: Human-readable representation of property-level error.
    :type message: str
    :param target: Property name.
    :type target: str
    """

    _attribute_map = {
        'code': {'key': 'code', 'type': 'str'},
        'message': {'key': 'message', 'type': 'str'},
        'target': {'key': 'target', 'type': 'str'},
    }

    def __init__(self, *, code: str=None, message: str=None, target: str=None, **kwargs) -> None:
        super(ErrorFieldContract, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.target = target


class ErrorResponse(Model):
    """Error Response.

    :param code: Service-defined error code. This code serves as a sub-status
     for the HTTP error code specified in the response.
    :type code: str
    :param message: Human-readable representation of the error.
    :type message: str
    :param details: The list of invalid fields send in request, in case of
     validation error.
    :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract]
    """

    _attribute_map = {
        'code': {'key': 'error.code', 'type': 'str'},
        'message': {'key': 'error.message', 'type': 'str'},
        'details': {'key': 'error.details', 'type': '[ErrorFieldContract]'},
    }

    def __init__(self, *, code: str=None, message: str=None, details=None, **kwargs) -> None:
        super(ErrorResponse, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.details = details


class ErrorResponseException(HttpOperationError):
    """Server responsed with exception of type: 'ErrorResponse'.

    :param deserialize: A deserializer
    :param response: Server response to be deserialized.
    """

    def __init__(self, deserialize, response, *args):

        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)


class ErrorResponseBody(Model):
    """Error Body contract.

    :param code: Service-defined error code. This code serves as a sub-status
     for the HTTP error code specified in the response.
    :type code: str
    :param message: Human-readable representation of the error.
    :type message: str
    :param details: The list of invalid fields send in request, in case of
     validation error.
    :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract]
    """

    _attribute_map = {
        'code': {'key': 'code', 'type': 'str'},
        'message': {'key': 'message', 'type': 'str'},
        'details': {'key': 'details', 'type': '[ErrorFieldContract]'},
    }

    def __init__(self, *, code: str=None, message: str=None, details=None, **kwargs) -> None:
        super(ErrorResponseBody, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.details = details


class GatewayContract(Resource):
    """Gateway details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param location_data: Gateway location.
    :type location_data:
     ~azure.mgmt.apimanagement.models.ResourceLocationDataContract
    :param description: Gateway description
    :type description: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'location_data': {'key': 'properties.locationData', 'type': 'ResourceLocationDataContract'},
        'description': {'key': 'properties.description', 'type': 'str'},
    }

    def __init__(self, *, location_data=None, description: str=None, **kwargs) -> None:
        super(GatewayContract, self).__init__(**kwargs)
        self.location_data = location_data
        self.description = description


class GatewayHostnameConfigurationContract(Resource):
    """Gateway hostname configuration details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param hostname: Hostname value. Supports valid domain name, partial or
     full wildcard
    :type hostname: str
    :param certificate_id: Identifier of Certificate entity that will be used
     for TLS connection establishment
    :type certificate_id: str
    :param negotiate_client_certificate: Determines whether gateway requests
     client certificate
    :type negotiate_client_certificate: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'hostname': {'key': 'properties.hostname', 'type': 'str'},
        'certificate_id': {'key': 'properties.certificateId', 'type': 'str'},
        'negotiate_client_certificate': {'key': 'properties.negotiateClientCertificate', 'type': 'bool'},
    }

    def __init__(self, *, hostname: str=None, certificate_id: str=None, negotiate_client_certificate: bool=None, **kwargs) -> None:
        super(GatewayHostnameConfigurationContract, self).__init__(**kwargs)
        self.hostname = hostname
        self.certificate_id = certificate_id
        self.negotiate_client_certificate = negotiate_client_certificate


class GatewayKeyRegenerationRequestContract(Model):
    """Gateway key regeneration request contract properties.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key being regenerated. Possible values
     include: 'primary', 'secondary'
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    """

    _validation = {
        'key_type': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'keyType', 'type': 'KeyType'},
    }

    def __init__(self, *, key_type, **kwargs) -> None:
        super(GatewayKeyRegenerationRequestContract, self).__init__(**kwargs)
        self.key_type = key_type


class GatewayKeysContract(Model):
    """Gateway authentication keys.

    :param primary: Primary gateway key.
    :type primary: str
    :param secondary: Secondary gateway key.
    :type secondary: str
    """

    _attribute_map = {
        'primary': {'key': 'primary', 'type': 'str'},
        'secondary': {'key': 'secondary', 'type': 'str'},
    }

    def __init__(self, *, primary: str=None, secondary: str=None, **kwargs) -> None:
        super(GatewayKeysContract, self).__init__(**kwargs)
        self.primary = primary
        self.secondary = secondary


class GatewayTokenContract(Model):
    """Gateway access token.

    :param value: Shared Access Authentication token value for the Gateway.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(GatewayTokenContract, self).__init__(**kwargs)
        self.value = value


class GatewayTokenRequestContract(Model):
    """Gateway token request contract properties.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key to be used to generate gateway token.
     Possible values include: 'primary', 'secondary'. Default value: "primary"
     .
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    :param expiry: Required. The Expiry time of the Token. Maximum token
     expiry time is set to 30 days. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type expiry: datetime
    """

    _validation = {
        'key_type': {'required': True},
        'expiry': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'keyType', 'type': 'KeyType'},
        'expiry': {'key': 'expiry', 'type': 'iso-8601'},
    }

    def __init__(self, *, expiry, key_type="primary", **kwargs) -> None:
        super(GatewayTokenRequestContract, self).__init__(**kwargs)
        self.key_type = key_type
        self.expiry = expiry


class GenerateSsoUrlResult(Model):
    """Generate SSO Url operations response details.

    :param value: Redirect Url containing the SSO URL value.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(GenerateSsoUrlResult, self).__init__(**kwargs)
        self.value = value


class GroupContract(Resource):
    """Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description. Can contain HTML formatting tags.
    :type description: str
    :ivar built_in: true if the group is one of the three system groups
     (Administrators, Developers, or Guests); otherwise false.
    :vartype built_in: bool
    :param group_contract_type: Group type. Possible values include: 'custom',
     'system', 'external'
    :type group_contract_type: str or
     ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: For external groups, this property contains the id of
     the group from the external identity provider, e.g. for Azure Active
     Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;
     otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'description': {'max_length': 1000},
        'built_in': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'built_in': {'key': 'properties.builtIn', 'type': 'bool'},
        'group_contract_type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, group_contract_type=None, external_id: str=None, **kwargs) -> None:
        super(GroupContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.built_in = None
        self.group_contract_type = group_contract_type
        self.external_id = external_id


class GroupContractProperties(Model):
    """Group contract Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description. Can contain HTML formatting tags.
    :type description: str
    :ivar built_in: true if the group is one of the three system groups
     (Administrators, Developers, or Guests); otherwise false.
    :vartype built_in: bool
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: For external groups, this property contains the id of
     the group from the external identity provider, e.g. for Azure Active
     Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;
     otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'description': {'max_length': 1000},
        'built_in': {'readonly': True},
    }

    _attribute_map = {
        'display_name': {'key': 'displayName', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'built_in': {'key': 'builtIn', 'type': 'bool'},
        'type': {'key': 'type', 'type': 'GroupType'},
        'external_id': {'key': 'externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupContractProperties, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.built_in = None
        self.type = type
        self.external_id = external_id


class GroupCreateParameters(Model):
    """Parameters supplied to the Create Group operation.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description.
    :type description: str
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: Identifier of the external groups, this property
     contains the id of the group from the external identity provider, e.g. for
     Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group
     object id>`; otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupCreateParameters, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.type = type
        self.external_id = external_id


class GroupUpdateParameters(Model):
    """Parameters supplied to the Update Group operation.

    :param display_name: Group name.
    :type display_name: str
    :param description: Group description.
    :type description: str
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: Identifier of the external groups, this property
     contains the id of the group from the external identity provider, e.g. for
     Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group
     object id>`; otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str=None, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupUpdateParameters, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.type = type
        self.external_id = external_id


class HostnameConfiguration(Model):
    """Custom hostname configuration.

    All required parameters must be populated in order to send to Azure.

    :param type: Required. Hostname type. Possible values include: 'Proxy',
     'Portal', 'Management', 'Scm', 'DeveloperPortal'
    :type type: str or ~azure.mgmt.apimanagement.models.HostnameType
    :param host_name: Required. Hostname to configure on the Api Management
     service.
    :type host_name: str
    :param key_vault_id: Url to the KeyVault Secret containing the Ssl
     Certificate. If absolute Url containing version is provided, auto-update
     of ssl certificate will not work. This requires Api Management service to
     be configured with MSI. The secret should be of type
     *application/x-pkcs12*
    :type key_vault_id: str
    :param encoded_certificate: Base64 Encoded certificate.
    :type encoded_certificate: str
    :param certificate_password: <PASSWORD>.
    :type certificate_password: str
    :param default_ssl_binding: Specify true to setup the certificate
     associated with this Hostname as the Default SSL Certificate. If a client
     does not send the SNI header, then this will be the certificate that will
     be challenged. The property is useful if a service has multiple custom
     hostname enabled and it needs to decide on the default ssl certificate.
     The setting only applied to Proxy Hostname Type. Default value: False .
    :type default_ssl_binding: bool
    :param negotiate_client_certificate: Specify true to always negotiate
     client certificate on the hostname. Default Value is false. Default value:
     False .
    :type negotiate_client_certificate: bool
    :param certificate: Certificate information.
    :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation
    """

    _validation = {
        'type': {'required': True},
        'host_name': {'required': True},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'host_name': {'key': 'hostName', 'type': 'str'},
        'key_vault_id': {'key': 'keyVaultId', 'type': 'str'},
        'encoded_certificate': {'key': 'encodedCertificate', 'type': 'str'},
        'certificate_password': {'key': 'certificatePassword', 'type': 'str'},
        'default_ssl_binding': {'key': 'defaultSslBinding', 'type': 'bool'},
        'negotiate_client_certificate': {'key': 'negotiateClientCertificate', 'type': 'bool'},
        'certificate': {'key': 'certificate', 'type': 'CertificateInformation'},
    }

    def __init__(self, *, type, host_name: str, key_vault_id: str=None, encoded_certificate: str=None, certificate_password: str=None, default_ssl_binding: bool=False, negotiate_client_certificate: bool=False, certificate=None, **kwargs) -> None:
        super(HostnameConfiguration, self).__init__(**kwargs)
        self.type = type
        self.host_name = host_name
        self.key_vault_id = key_vault_id
        self.encoded_certificate = encoded_certificate
        self.certificate_password = <PASSWORD>
        self.default_ssl_binding = default_ssl_binding
        self.negotiate_client_certificate = negotiate_client_certificate
        self.certificate = certificate


class HttpMessageDiagnostic(Model):
    """Http message diagnostic settings.

    :param headers: Array of HTTP Headers to log.
    :type headers: list[str]
    :param body: Body logging settings.
    :type body: ~azure.mgmt.apimanagement.models.BodyDiagnosticSettings
    """

    _attribute_map = {
        'headers': {'key': 'headers', 'type': '[str]'},
        'body': {'key': 'body', 'type': 'BodyDiagnosticSettings'},
    }

    def __init__(self, *, headers=None, body=None, **kwargs) -> None:
        super(HttpMessageDiagnostic, self).__init__(**kwargs)
        self.headers = headers
        self.body = body


class IdentityProviderBaseParameters(Model):
    """Identity Provider Base Parameter Properties.

    :param type: Identity Provider Type identifier. Possible values include:
     'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'
    :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    """

    _validation = {
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'signin_tenant': {'key': 'signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'allowedTenants', 'type': '[str]'},
        'authority': {'key': 'authority', 'type': 'str'},
        'signup_policy_name': {'key': 'signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'passwordResetPolicyName', 'type': 'str'},
    }

    def __init__(self, *, type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, **kwargs) -> None:
        super(IdentityProviderBaseParameters, self).__init__(**kwargs)
        self.type = type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name


class IdentityProviderContract(Resource):
    """Identity Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param identity_provider_contract_type: Identity Provider Type identifier.
     Possible values include: 'facebook', 'google', 'microsoft', 'twitter',
     'aad', 'aadB2C'
    :type identity_provider_contract_type: str or
     ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Required. Client Id of the Application in the external
     Identity Provider. It is App ID for Facebook login, Client ID for Google
     login, App ID for Microsoft.
    :type client_id: str
    :param client_secret: Client secret of the Application in external
     Identity Provider, used to authenticate login request. For example, it is
     App Secret for Facebook login, API Key for Google login, Public Key for
     Microsoft. This property will not be filled on 'GET' operations! Use
     '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'required': True, 'min_length': 1},
        'client_secret': {'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'identity_provider_contract_type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_id: str, identity_provider_contract_type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, client_secret: str=None, **kwargs) -> None:
        super(IdentityProviderContract, self).__init__(**kwargs)
        self.identity_provider_contract_type = identity_provider_contract_type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IdentityProviderCreateContract(Resource):
    """Identity Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param identity_provider_create_contract_type: Identity Provider Type
     identifier. Possible values include: 'facebook', 'google', 'microsoft',
     'twitter', 'aad', 'aadB2C'
    :type identity_provider_create_contract_type: str or
     ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Required. Client Id of the Application in the external
     Identity Provider. It is App ID for Facebook login, Client ID for Google
     login, App ID for Microsoft.
    :type client_id: str
    :param client_secret: Required. Client secret of the Application in
     external Identity Provider, used to authenticate login request. For
     example, it is App Secret for Facebook login, API Key for Google login,
     Public Key for Microsoft. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'required': True, 'min_length': 1},
        'client_secret': {'required': True, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'identity_provider_create_contract_type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_id: str, client_secret: str, identity_provider_create_contract_type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, **kwargs) -> None:
        super(IdentityProviderCreateContract, self).__init__(**kwargs)
        self.identity_provider_create_contract_type = identity_provider_create_contract_type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IdentityProviderUpdateParameters(Model):
    """Parameters supplied to update Identity Provider.

    :param type: Identity Provider Type identifier. Possible values include:
     'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'
    :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Client Id of the Application in the external Identity
     Provider. It is App ID for Facebook login, Client ID for Google login, App
     ID for Microsoft.
    :type client_id: str
    :param client_secret: Client secret of the Application in external
     Identity Provider, used to authenticate login request. For example, it is
     App Secret for Facebook login, API Key for Google login, Public Key for
     Microsoft.
    :type client_secret: str
    """

    _validation = {
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'min_length': 1},
        'client_secret': {'min_length': 1},
    }

    _attribute_map = {
        'type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(IdentityProviderUpdateParameters, self).__init__(**kwargs)
        self.type = type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IssueAttachmentContract(Resource):
    """Issue Attachment Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Required. Filename by which the binary data will be saved.
    :type title: str
    :param content_format: Required. Either 'link' if content is provided via
     an HTTP link or the MIME type of the Base64-encoded binary data provided
     in the 'content' property.
    :type content_format: str
    :param content: Required. An HTTP link or Base64-encoded binary data.
    :type content: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True},
        'content_format': {'required': True},
        'content': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'content_format': {'key': 'properties.contentFormat', 'type': 'str'},
        'content': {'key': 'properties.content', 'type': 'str'},
    }

    def __init__(self, *, title: str, content_format: str, content: str, **kwargs) -> None:
        super(IssueAttachmentContract, self).__init__(**kwargs)
        self.title = title
        self.content_format = content_format
        self.content = content


class IssueCommentContract(Resource):
    """Issue Comment Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param text: Required. Comment text.
    :type text: str
    :param created_date: Date and time when the comment was created.
    :type created_date: datetime
    :param user_id: Required. A resource identifier for the user who left the
     comment.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'text': {'required': True},
        'user_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'text': {'key': 'properties.text', 'type': 'str'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, text: str, user_id: str, created_date=None, **kwargs) -> None:
        super(IssueCommentContract, self).__init__(**kwargs)
        self.text = text
        self.created_date = created_date
        self.user_id = user_id


class IssueContract(Resource):
    """Issue Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    :param title: Required. The issue title.
    :type title: str
    :param description: Required. Text describing the issue.
    :type description: str
    :param user_id: Required. A resource identifier for the user created the
     issue.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True},
        'description': {'required': True},
        'user_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, title: str, description: str, user_id: str, created_date=None, state=None, api_id: str=None, **kwargs) -> None:
        super(IssueContract, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id
        self.title = title
        self.description = description
        self.user_id = user_id


class IssueContractBaseProperties(Model):
    """Issue contract Base Properties.

    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    """

    _attribute_map = {
        'created_date': {'key': 'createdDate', 'type': 'iso-8601'},
        'state': {'key': 'state', 'type': 'str'},
        'api_id': {'key': 'apiId', 'type': 'str'},
    }

    def __init__(self, *, created_date=None, state=None, api_id: str=None, **kwargs) -> None:
        super(IssueContractBaseProperties, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id


class IssueUpdateContract(Model):
    """Issue update Parameters.

    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    :param title: The issue title.
    :type title: str
    :param description: Text describing the issue.
    :type description: str
    :param user_id: A resource identifier for the user created the issue.
    :type user_id: str
    """

    _attribute_map = {
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, created_date=None, state=None, api_id: str=None, title: str=None, description: str=None, user_id: str=None, **kwargs) -> None:
        super(IssueUpdateContract, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id
        self.title = title
        self.description = description
        self.user_id = user_id


class LoggerContract(Resource):
    """Logger details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param logger_type: Required. Logger type. Possible values include:
     'azureEventHub', 'applicationInsights'
    :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType
    :param description: Logger description.
    :type description: str
    :param credentials: Required. The name and SendRule connection string of
     the event hub for azureEventHub logger.
     Instrumentation key for applicationInsights logger.
    :type credentials: dict[str, str]
    :param is_buffered: Whether records are buffered in the logger before
     publishing. Default is assumed to be true.
    :type is_buffered: bool
    :param resource_id: Azure Resource Id of a log target (either Azure Event
     Hub resource or Azure Application Insights resource).
    :type resource_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'logger_type': {'required': True},
        'description': {'max_length': 256},
        'credentials': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'logger_type': {'key': 'properties.loggerType', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'credentials': {'key': 'properties.credentials', 'type': '{str}'},
        'is_buffered': {'key': 'properties.isBuffered', 'type': 'bool'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, logger_type, credentials, description: str=None, is_buffered: bool=None, resource_id: str=None, **kwargs) -> None:
        super(LoggerContract, self).__init__(**kwargs)
        self.logger_type = logger_type
        self.description = description
        self.credentials = credentials
        self.is_buffered = is_buffered
        self.resource_id = resource_id


class LoggerUpdateContract(Model):
    """Logger update contract.

    :param logger_type: Logger type. Possible values include: 'azureEventHub',
     'applicationInsights'
    :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType
    :param description: Logger description.
    :type description: str
    :param credentials: Logger credentials.
    :type credentials: dict[str, str]
    :param is_buffered: Whether records are buffered in the logger before
     publishing. Default is assumed to be true.
    :type is_buffered: bool
    """

    _attribute_map = {
        'logger_type': {'key': 'properties.loggerType', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'credentials': {'key': 'properties.credentials', 'type': '{str}'},
        'is_buffered': {'key': 'properties.isBuffered', 'type': 'bool'},
    }

    def __init__(self, *, logger_type=None, description: str=None, credentials=None, is_buffered: bool=None, **kwargs) -> None:
        super(LoggerUpdateContract, self).__init__(**kwargs)
        self.logger_type = logger_type
        self.description = description
        self.credentials = credentials
        self.is_buffered = is_buffered


class NamedValueContract(Resource):
    """NamedValue details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Required. Unique name of NamedValue. It may contain
     only letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Value of the NamedValue. Can contain policy expressions. It
     may not be empty or consist only of whitespace. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type value: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'tags': {'max_items': 32},
        'display_name': {'required': True, 'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, tags=None, secret: bool=None, value: str=None, **kwargs) -> None:
        super(NamedValueContract, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NamedValueCreateContract(Resource):
    """NamedValue details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Required. Unique name of NamedValue. It may contain
     only letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Required. Value of the NamedValue. Can contain policy
     expressions. It may not be empty or consist only of whitespace. This
     property will not be filled on 'GET' operations! Use '/listSecrets' POST
     request to get the value.
    :type value: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'tags': {'max_items': 32},
        'display_name': {'required': True, 'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'required': True, 'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, value: str, tags=None, secret: bool=None, **kwargs) -> None:
        super(NamedValueCreateContract, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NamedValueEntityBaseParameters(Model):
    """NamedValue Entity Base Parameters set.

    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    """

    _validation = {
        'tags': {'max_items': 32},
    }

    _attribute_map = {
        'tags': {'key': 'tags', 'type': '[str]'},
        'secret': {'key': 'secret', 'type': 'bool'},
    }

    def __init__(self, *, tags=None, secret: bool=None, **kwargs) -> None:
        super(NamedValueEntityBaseParameters, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret


class NamedValueUpdateParameters(Model):
    """NamedValue update Parameters.

    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Unique name of NamedValue. It may contain only
     letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Value of the NamedValue. Can contain policy expressions. It
     may not be empty or consist only of whitespace.
    :type value: str
    """

    _validation = {
        'tags': {'max_items': 32},
        'display_name': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, tags=None, secret: bool=None, display_name: str=None, value: str=None, **kwargs) -> None:
        super(NamedValueUpdateParameters, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NetworkStatusContract(Model):
    """Network Status details.

    All required parameters must be populated in order to send to Azure.

    :param dns_servers: Required. Gets the list of DNS servers IPV4 addresses.
    :type dns_servers: list[str]
    :param connectivity_status: Required. Gets the list of Connectivity Status
     to the Resources on which the service depends upon.
    :type connectivity_status:
     list[~azure.mgmt.apimanagement.models.ConnectivityStatusContract]
    """

    _validation = {
        'dns_servers': {'required': True},
        'connectivity_status': {'required': True},
    }

    _attribute_map = {
        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
        'connectivity_status': {'key': 'connectivityStatus', 'type': '[ConnectivityStatusContract]'},
    }

    def __init__(self, *, dns_servers, connectivity_status, **kwargs) -> None:
        super(NetworkStatusContract, self).__init__(**kwargs)
        self.dns_servers = dns_servers
        self.connectivity_status = connectivity_status


class NetworkStatusContractByLocation(Model):
    """Network Status in the Location.

    :param location: Location of service
    :type location: str
    :param network_status: Network status in Location
    :type network_status:
     ~azure.mgmt.apimanagement.models.NetworkStatusContract
    """

    _validation = {
        'location': {'min_length': 1},
    }

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
        'network_status': {'key': 'networkStatus', 'type': 'NetworkStatusContract'},
    }

    def __init__(self, *, location: str=None, network_status=None, **kwargs) -> None:
        super(NetworkStatusContractByLocation, self).__init__(**kwargs)
        self.location = location
        self.network_status = network_status


class NotificationContract(Resource):
    """Notification details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Required. Title of the Notification.
    :type title: str
    :param description: Description of the Notification.
    :type description: str
    :param recipients: Recipient Parameter values.
    :type recipients:
     ~azure.mgmt.apimanagement.models.RecipientsContractProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True, 'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'recipients': {'key': 'properties.recipients', 'type': 'RecipientsContractProperties'},
    }

    def __init__(self, *, title: str, description: str=None, recipients=None, **kwargs) -> None:
        super(NotificationContract, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.recipients = recipients


class OAuth2AuthenticationSettingsContract(Model):
    """API OAuth2 Authentication settings details.

    :param authorization_server_id: OAuth authorization server identifier.
    :type authorization_server_id: str
    :param scope: operations scope.
    :type scope: str
    """

    _attribute_map = {
        'authorization_server_id': {'key': 'authorizationServerId', 'type': 'str'},
        'scope': {'key': 'scope', 'type': 'str'},
    }

    def __init__(self, *, authorization_server_id: str=None, scope: str=None, **kwargs) -> None:
        super(OAuth2AuthenticationSettingsContract, self).__init__(**kwargs)
        self.authorization_server_id = authorization_server_id
        self.scope = scope


class OpenIdAuthenticationSettingsContract(Model):
    """API OAuth2 Authentication settings details.

    :param openid_provider_id: OAuth authorization server identifier.
    :type openid_provider_id: str
    :param bearer_token_sending_methods: How to send token to the server.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethods]
    """

    _attribute_map = {
        'openid_provider_id': {'key': 'openidProviderId', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'bearerTokenSendingMethods', 'type': '[str]'},
    }

    def __init__(self, *, openid_provider_id: str=None, bearer_token_sending_methods=None, **kwargs) -> None:
        super(OpenIdAuthenticationSettingsContract, self).__init__(**kwargs)
        self.openid_provider_id = openid_provider_id
        self.bearer_token_sending_methods = bearer_token_sending_methods


class OpenidConnectProviderContract(Resource):
    """OpenId Connect Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. User-friendly OpenID Connect Provider name.
    :type display_name: str
    :param description: User-friendly description of OpenID Connect Provider.
    :type description: str
    :param metadata_endpoint: Required. Metadata endpoint URI.
    :type metadata_endpoint: str
    :param client_id: Required. Client ID of developer console which is the
     client application.
    :type client_id: str
    :param client_secret: Client Secret of developer console which is the
     client application.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 50},
        'metadata_endpoint': {'required': True},
        'client_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'metadata_endpoint': {'key': 'properties.metadataEndpoint', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, metadata_endpoint: str, client_id: str, description: str=None, client_secret: str=None, **kwargs) -> None:
        super(OpenidConnectProviderContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.metadata_endpoint = metadata_endpoint
        self.client_id = client_id
        self.client_secret = client_secret


class OpenidConnectProviderUpdateContract(Model):
    """Parameters supplied to the Update OpenID Connect Provider operation.

    :param display_name: User-friendly OpenID Connect Provider name.
    :type display_name: str
    :param description: User-friendly description of OpenID Connect Provider.
    :type description: str
    :param metadata_endpoint: Metadata endpoint URI.
    :type metadata_endpoint: str
    :param client_id: Client ID of developer console which is the client
     application.
    :type client_id: str
    :param client_secret: Client Secret of developer console which is the
     client application.
    :type client_secret: str
    """

    _validation = {
        'display_name': {'max_length': 50},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'metadata_endpoint': {'key': 'properties.metadataEndpoint', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str=None, description: str=None, metadata_endpoint: str=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(OpenidConnectProviderUpdateContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.metadata_endpoint = metadata_endpoint
        self.client_id = client_id
        self.client_secret = client_secret


class Operation(Model):
    """REST API operation.

    :param name: Operation name: {provider}/{resource}/{operation}
    :type name: str
    :param display: The object that describes the operation.
    :type display: ~azure.mgmt.apimanagement.models.OperationDisplay
    :param origin: The operation origin.
    :type origin: str
    :param properties: The operation properties.
    :type properties: object
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'display': {'key': 'display', 'type': 'OperationDisplay'},
        'origin': {'key': 'origin', 'type': 'str'},
        'properties': {'key': 'properties', 'type': 'object'},
    }

    def __init__(self, *, name: str=None, display=None, origin: str=None, properties=None, **kwargs) -> None:
        super(Operation, self).__init__(**kwargs)
        self.name = name
        self.display = display
        self.origin = origin
        self.properties = properties


class OperationContract(Resource):
    """Api Operation details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    :param display_name: Required. Operation Name.
    :type display_name: str
    :param method: Required. A Valid HTTP Operation Method. Typical Http
     Methods like GET, PUT, POST but not limited by only them.
    :type method: str
    :param url_template: Required. Relative URL template identifying the
     target resource for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :type url_template: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'method': {'required': True},
        'url_template': {'required': True, 'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'template_parameters': {'key': 'properties.templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'request': {'key': 'properties.request', 'type': 'RequestContract'},
        'responses': {'key': 'properties.responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'properties.policies', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'method': {'key': 'properties.method', 'type': 'str'},
        'url_template': {'key': 'properties.urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, method: str, url_template: str, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, **kwargs) -> None:
        super(OperationContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies
        self.display_name = display_name
        self.method = method
        self.url_template = url_template


class OperationDisplay(Model):
    """The object that describes the operation.

    :param provider: Friendly name of the resource provider
    :type provider: str
    :param operation: Operation type: read, write, delete, listKeys/action,
     etc.
    :type operation: str
    :param resource: Resource type on which the operation is performed.
    :type resource: str
    :param description: Friendly name of the operation
    :type description: str
    """

    _attribute_map = {
        'provider': {'key': 'provider', 'type': 'str'},
        'operation': {'key': 'operation', 'type': 'str'},
        'resource': {'key': 'resource', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
    }

    def __init__(self, *, provider: str=None, operation: str=None, resource: str=None, description: str=None, **kwargs) -> None:
        super(OperationDisplay, self).__init__(**kwargs)
        self.provider = provider
        self.operation = operation
        self.resource = resource
        self.description = description


class OperationEntityBaseContract(Model):
    """Api Operation Entity Base Contract details.

    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    """

    _validation = {
        'description': {'max_length': 1000},
    }

    _attribute_map = {
        'template_parameters': {'key': 'templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'description', 'type': 'str'},
        'request': {'key': 'request', 'type': 'RequestContract'},
        'responses': {'key': 'responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'policies', 'type': 'str'},
    }

    def __init__(self, *, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, **kwargs) -> None:
        super(OperationEntityBaseContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies


class OperationResultContract(Model):
    """Operation Result.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param id: Operation result identifier.
    :type id: str
    :param status: Status of an async operation. Possible values include:
     'Started', 'InProgress', 'Succeeded', 'Failed'
    :type status: str or ~azure.mgmt.apimanagement.models.AsyncOperationStatus
    :param started: Start time of an async operation. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type started: datetime
    :param updated: Last update time of an async operation. The date conforms
     to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO
     8601 standard.
    :type updated: datetime
    :param result_info: Optional result info.
    :type result_info: str
    :param error: Error Body Contract
    :type error: ~azure.mgmt.apimanagement.models.ErrorResponseBody
    :ivar action_log: This property if only provided as part of the
     TenantConfiguration_Validate operation. It contains the log the entities
     which will be updated/created/deleted as part of the
     TenantConfiguration_Deploy operation.
    :vartype action_log:
     list[~azure.mgmt.apimanagement.models.OperationResultLogItemContract]
    """

    _validation = {
        'action_log': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'status': {'key': 'status', 'type': 'AsyncOperationStatus'},
        'started': {'key': 'started', 'type': 'iso-8601'},
        'updated': {'key': 'updated', 'type': 'iso-8601'},
        'result_info': {'key': 'resultInfo', 'type': 'str'},
        'error': {'key': 'error', 'type': 'ErrorResponseBody'},
        'action_log': {'key': 'actionLog', 'type': '[OperationResultLogItemContract]'},
    }

    def __init__(self, *, id: str=None, status=None, started=None, updated=None, result_info: str=None, error=None, **kwargs) -> None:
        super(OperationResultContract, self).__init__(**kwargs)
        self.id = id
        self.status = status
        self.started = started
        self.updated = updated
        self.result_info = result_info
        self.error = error
        self.action_log = None


class OperationResultLogItemContract(Model):
    """Log of the entity being created, updated or deleted.

    :param object_type: The type of entity contract.
    :type object_type: str
    :param action: Action like create/update/delete.
    :type action: str
    :param object_key: Identifier of the entity being created/updated/deleted.
    :type object_key: str
    """

    _attribute_map = {
        'object_type': {'key': 'objectType', 'type': 'str'},
        'action': {'key': 'action', 'type': 'str'},
        'object_key': {'key': 'objectKey', 'type': 'str'},
    }

    def __init__(self, *, object_type: str=None, action: str=None, object_key: str=None, **kwargs) -> None:
        super(OperationResultLogItemContract, self).__init__(**kwargs)
        self.object_type = object_type
        self.action = action
        self.object_key = object_key


class OperationTagResourceContractProperties(Model):
    """Operation Entity contract Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param id: Identifier of the operation in form /operations/{operationId}.
    :type id: str
    :ivar name: Operation name.
    :vartype name: str
    :ivar api_name: Api Name.
    :vartype api_name: str
    :ivar api_revision: Api Revision.
    :vartype api_revision: str
    :ivar api_version: Api Version.
    :vartype api_version: str
    :ivar description: Operation Description.
    :vartype description: str
    :ivar method: A Valid HTTP Operation Method. Typical Http Methods like
     GET, PUT, POST but not limited by only them.
    :vartype method: str
    :ivar url_template: Relative URL template identifying the target resource
     for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :vartype url_template: str
    """

    _validation = {
        'name': {'readonly': True},
        'api_name': {'readonly': True},
        'api_revision': {'readonly': True},
        'api_version': {'readonly': True},
        'description': {'readonly': True},
        'method': {'readonly': True},
        'url_template': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'api_name': {'key': 'apiName', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'method': {'key': 'method', 'type': 'str'},
        'url_template': {'key': 'urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, **kwargs) -> None:
        super(OperationTagResourceContractProperties, self).__init__(**kwargs)
        self.id = id
        self.name = None
        self.api_name = None
        self.api_revision = None
        self.api_version = None
        self.description = None
        self.method = None
        self.url_template = None


class OperationUpdateContract(Model):
    """Api Operation Update Contract details.

    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    :param display_name: Operation Name.
    :type display_name: str
    :param method: A Valid HTTP Operation Method. Typical Http Methods like
     GET, PUT, POST but not limited by only them.
    :type method: str
    :param url_template: Relative URL template identifying the target resource
     for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :type url_template: str
    """

    _validation = {
        'description': {'max_length': 1000},
        'display_name': {'max_length': 300, 'min_length': 1},
        'url_template': {'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'template_parameters': {'key': 'properties.templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'request': {'key': 'properties.request', 'type': 'RequestContract'},
        'responses': {'key': 'properties.responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'properties.policies', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'method': {'key': 'properties.method', 'type': 'str'},
        'url_template': {'key': 'properties.urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, display_name: str=None, method: str=None, url_template: str=None, **kwargs) -> None:
        super(OperationUpdateContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies
        self.display_name = display_name
        self.method = method
        self.url_template = url_template


class ParameterContract(Model):
    """Operation parameters details.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. Parameter name.
    :type name: str
    :param description: Parameter description.
    :type description: str
    :param type: Required. Parameter type.
    :type type: str
    :param default_value: Default parameter value.
    :type default_value: str
    :param required: Specifies whether parameter is required or not.
    :type required: bool
    :param values: Parameter values.
    :type values: list[str]
    """

    _validation = {
        'name': {'required': True},
        'type': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'default_value': {'key': 'defaultValue', 'type': 'str'},
        'required': {'key': 'required', 'type': 'bool'},
        'values': {'key': 'values', 'type': '[str]'},
    }

    def __init__(self, *, name: str, type: str, description: str=None, default_value: str=None, required: bool=None, values=None, **kwargs) -> None:
        super(ParameterContract, self).__init__(**kwargs)
        self.name = name
        self.description = description
        self.type = type
        self.default_value = default_value
        self.required = required
        self.values = values


class PipelineDiagnosticSettings(Model):
    """Diagnostic settings for incoming/outgoing HTTP messages to the Gateway.

    :param request: Diagnostic settings for request.
    :type request: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic
    :param response: Diagnostic settings for response.
    :type response: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic
    """

    _attribute_map = {
        'request': {'key': 'request', 'type': 'HttpMessageDiagnostic'},
        'response': {'key': 'response', 'type': 'HttpMessageDiagnostic'},
    }

    def __init__(self, *, request=None, response=None, **kwargs) -> None:
        super(PipelineDiagnosticSettings, self).__init__(**kwargs)
        self.request = request
        self.response = response


class PolicyCollection(Model):
    """The response of the list policy operation.

    :param value: Policy Contract value.
    :type value: list[~azure.mgmt.apimanagement.models.PolicyContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[PolicyContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(PolicyCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class PolicyContract(Resource):
    """Policy Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param value: Required. Contents of the Policy as defined by the format.
    :type value: str
    :param format: Format of the policyContent. Possible values include:
     'xml', 'xml-link', 'rawxml', 'rawxml-link'. Default value: "xml" .
    :type format: str or ~azure.mgmt.apimanagement.models.PolicyContentFormat
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'value': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
        'format': {'key': 'properties.format', 'type': 'str'},
    }

    def __init__(self, *, value: str, format="xml", **kwargs) -> None:
        super(PolicyContract, self).__init__(**kwargs)
        self.value = value
        self.format = format


class PolicyDescriptionCollection(Model):
    """Descriptions of APIM policies.

    :param value: Descriptions of APIM policies.
    :type value:
     list[~azure.mgmt.apimanagement.models.PolicyDescriptionContract]
    :param count: Total record count number.
    :type count: long
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[PolicyDescriptionContract]'},
        'count': {'key': 'count', 'type': 'long'},
    }

    def __init__(self, *, value=None, count: int=None, **kwargs) -> None:
        super(PolicyDescriptionCollection, self).__init__(**kwargs)
        self.value = value
        self.count = count


class PolicyDescriptionContract(Resource):
    """Policy description details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :ivar description: Policy description.
    :vartype description: str
    :ivar scope: Binary OR value of the Snippet scope.
    :vartype scope: int
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'readonly': True},
        'scope': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'int'},
    }

    def __init__(self, **kwargs) -> None:
        super(PolicyDescriptionContract, self).__init__(**kwargs)
        self.description = None
        self.scope = None


class PortalDelegationSettings(Resource):
    """Delegation settings for a developer portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param url: A delegation Url.
    :type url: str
    :param validation_key: A base64-encoded validation key to validate, that a
     request is coming from Azure API Management.
    :type validation_key: str
    :param subscriptions: Subscriptions delegation settings.
    :type subscriptions:
     ~azure.mgmt.apimanagement.models.SubscriptionsDelegationSettingsProperties
    :param user_registration: User registration delegation settings.
    :type user_registration:
     ~azure.mgmt.apimanagement.models.RegistrationDelegationSettingsProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'validation_key': {'key': 'properties.validationKey', 'type': 'str'},
        'subscriptions': {'key': 'properties.subscriptions', 'type': 'SubscriptionsDelegationSettingsProperties'},
        'user_registration': {'key': 'properties.userRegistration', 'type': 'RegistrationDelegationSettingsProperties'},
    }

    def __init__(self, *, url: str=None, validation_key: str=None, subscriptions=None, user_registration=None, **kwargs) -> None:
        super(PortalDelegationSettings, self).__init__(**kwargs)
        self.url = url
        self.validation_key = validation_key
        self.subscriptions = subscriptions
        self.user_registration = user_registration


class PortalSettingValidationKeyContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param validation_key: This is secret value of the validation key in
     portal settings.
    :type validation_key: str
    """

    _attribute_map = {
        'validation_key': {'key': 'validationKey', 'type': 'str'},
    }

    def __init__(self, *, validation_key: str=None, **kwargs) -> None:
        super(PortalSettingValidationKeyContract, self).__init__(**kwargs)
        self.validation_key = validation_key


class PortalSigninSettings(Resource):
    """Sign-In settings for the Developer Portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param enabled: Redirect Anonymous users to the Sign-In page.
    :type enabled: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(PortalSigninSettings, self).__init__(**kwargs)
        self.enabled = enabled


class PortalSignupSettings(Resource):
    """Sign-Up settings for a developer portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param enabled: Allow users to sign up on a developer portal.
    :type enabled: bool
    :param terms_of_service: Terms of service contract properties.
    :type terms_of_service:
     ~azure.mgmt.apimanagement.models.TermsOfServiceProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
        'terms_of_service': {'key': 'properties.termsOfService', 'type': 'TermsOfServiceProperties'},
    }

    def __init__(self, *, enabled: bool=None, terms_of_service=None, **kwargs) -> None:
        super(PortalSignupSettings, self).__init__(**kwargs)
        self.enabled = enabled
        self.terms_of_service = terms_of_service


class ProductContract(Resource):
    """Product details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param display_name: Required. Product name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000, 'min_length': 1},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'terms': {'key': 'properties.terms', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'properties.approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'properties.subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'properties.state', 'type': 'ProductState'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, **kwargs) -> None:
        super(ProductContract, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state
        self.display_name = display_name


class ProductEntityBaseParameters(Model):
    """Product Entity Base Parameters.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'terms': {'key': 'terms', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'state', 'type': 'ProductState'},
    }

    def __init__(self, *, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, **kwargs) -> None:
        super(ProductEntityBaseParameters, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state


class ProductTagResourceContractProperties(ProductEntityBaseParameters):
    """Product profile.

    All required parameters must be populated in order to send to Azure.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param id: Identifier of the product in the form of /products/{productId}
    :type id: str
    :param name: Required. Product name.
    :type name: str
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
        'name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'terms': {'key': 'terms', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'state', 'type': 'ProductState'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name: str, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, id: str=None, **kwargs) -> None:
        super(ProductTagResourceContractProperties, self).__init__(description=description, terms=terms, subscription_required=subscription_required, approval_required=approval_required, subscriptions_limit=subscriptions_limit, state=state, **kwargs)
        self.id = id
        self.name = name


class ProductUpdateParameters(Model):
    """Product Update parameters.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param display_name: Product name.
    :type display_name: str
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
        'display_name': {'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'terms': {'key': 'properties.terms', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'properties.approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'properties.subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'properties.state', 'type': 'ProductState'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, display_name: str=None, **kwargs) -> None:
        super(ProductUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state
        self.display_name = display_name


class PropertyValueContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param value: This is secret value of the NamedValue entity.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(PropertyValueContract, self).__init__(**kwargs)
        self.value = value


class QuotaCounterCollection(Model):
    """Paged Quota Counter list representation.

    :param value: Quota counter values.
    :type value: list[~azure.mgmt.apimanagement.models.QuotaCounterContract]
    :param count: Total record count number across all pages.
    :type count: long
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[QuotaCounterContract]'},
        'count': {'key': 'count', 'type': 'long'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, count: int=None, next_link: str=None, **kwargs) -> None:
        super(QuotaCounterCollection, self).__init__(**kwargs)
        self.value = value
        self.count = count
        self.next_link = next_link


class QuotaCounterContract(Model):
    """Quota counter details.

    All required parameters must be populated in order to send to Azure.

    :param counter_key: Required. The Key value of the Counter. Must not be
     empty.
    :type counter_key: str
    :param period_key: Required. Identifier of the Period for which the
     counter was collected. Must not be empty.
    :type period_key: str
    :param period_start_time: Required. The date of the start of Counter
     Period. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type period_start_time: datetime
    :param period_end_time: Required. The date of the end of Counter Period.
     The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type period_end_time: datetime
    :param value: Quota Value Properties
    :type value:
     ~azure.mgmt.apimanagement.models.QuotaCounterValueContractProperties
    """

    _validation = {
        'counter_key': {'required': True, 'min_length': 1},
        'period_key': {'required': True, 'min_length': 1},
        'period_start_time': {'required': True},
        'period_end_time': {'required': True},
    }

    _attribute_map = {
        'counter_key': {'key': 'counterKey', 'type': 'str'},
        'period_key': {'key': 'periodKey', 'type': 'str'},
        'period_start_time': {'key': 'periodStartTime', 'type': 'iso-8601'},
        'period_end_time': {'key': 'periodEndTime', 'type': 'iso-8601'},
        'value': {'key': 'value', 'type': 'QuotaCounterValueContractProperties'},
    }

    def __init__(self, *, counter_key: str, period_key: str, period_start_time, period_end_time, value=None, **kwargs) -> None:
        super(QuotaCounterContract, self).__init__(**kwargs)
        self.counter_key = counter_key
        self.period_key = period_key
        self.period_start_time = period_start_time
        self.period_end_time = period_end_time
        self.value = value


class QuotaCounterValueContract(Model):
    """Quota counter value details.

    :param calls_count: Number of times Counter was called.
    :type calls_count: int
    :param kb_transferred: Data Transferred in KiloBytes.
    :type kb_transferred: float
    """

    _attribute_map = {
        'calls_count': {'key': 'value.callsCount', 'type': 'int'},
        'kb_transferred': {'key': 'value.kbTransferred', 'type': 'float'},
    }

    def __init__(self, *, calls_count: int=None, kb_transferred: float=None, **kwargs) -> None:
        super(QuotaCounterValueContract, self).__init__(**kwargs)
        self.calls_count = calls_count
        self.kb_transferred = kb_transferred


class QuotaCounterValueContractProperties(Model):
    """Quota counter value details.

    :param calls_count: Number of times Counter was called.
    :type calls_count: int
    :param kb_transferred: Data Transferred in KiloBytes.
    :type kb_transferred: float
    """

    _attribute_map = {
        'calls_count': {'key': 'callsCount', 'type': 'int'},
        'kb_transferred': {'key': 'kbTransferred', 'type': 'float'},
    }

    def __init__(self, *, calls_count: int=None, kb_transferred: float=None, **kwargs) -> None:
        super(QuotaCounterValueContractProperties, self).__init__(**kwargs)
        self.calls_count = calls_count
        self.kb_transferred = kb_transferred


class RecipientEmailCollection(Model):
    """Paged Recipient User list representation.

    :param value: Page values.
    :type value: list[~azure.mgmt.apimanagement.models.RecipientEmailContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[RecipientEmailContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(RecipientEmailCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class RecipientEmailContract(Resource):
    """Recipient Email details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param email: User Email subscribed to notification.
    :type email: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'email': {'key': 'properties.email', 'type': 'str'},
    }

    def __init__(self, *, email: str=None, **kwargs) -> None:
        super(RecipientEmailContract, self).__init__(**kwargs)
        self.email = email


class RecipientsContractProperties(Model):
    """Notification Parameter contract.

    :param emails: List of Emails subscribed for the notification.
    :type emails: list[str]
    :param users: List of Users subscribed for the notification.
    :type users: list[str]
    """

    _attribute_map = {
        'emails': {'key': 'emails', 'type': '[str]'},
        'users': {'key': 'users', 'type': '[str]'},
    }

    def __init__(self, *, emails=None, users=None, **kwargs) -> None:
        super(RecipientsContractProperties, self).__init__(**kwargs)
        self.emails = emails
        self.users = users


class RecipientUserCollection(Model):
    """Paged Recipient User list representation.

    :param value: Page values.
    :type value: list[~azure.mgmt.apimanagement.models.RecipientUserContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[RecipientUserContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(RecipientUserCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class RecipientUserContract(Resource):
    """Recipient User details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param user_id: API Management UserId subscribed to notification.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, user_id: str=None, **kwargs) -> None:
        super(RecipientUserContract, self).__init__(**kwargs)
        self.user_id = user_id


class RegionContract(Model):
    """Region profile.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar name: Region name.
    :vartype name: str
    :param is_master_region: whether Region is the master region.
    :type is_master_region: bool
    :param is_deleted: whether Region is deleted.
    :type is_deleted: bool
    """

    _validation = {
        'name': {'readonly': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'is_master_region': {'key': 'isMasterRegion', 'type': 'bool'},
        'is_deleted': {'key': 'isDeleted', 'type': 'bool'},
    }

    def __init__(self, *, is_master_region: bool=None, is_deleted: bool=None, **kwargs) -> None:
        super(RegionContract, self).__init__(**kwargs)
        self.name = None
        self.is_master_region = is_master_region
        self.is_deleted = is_deleted


class RegistrationDelegationSettingsProperties(Model):
    """User registration delegation settings properties.

    :param enabled: Enable or disable delegation for user registration.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(RegistrationDelegationSettingsProperties, self).__init__(**kwargs)
        self.enabled = enabled


class ReportRecordContract(Model):
    """Report data.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param name: Name depending on report endpoint specifies product, API,
     operation or developer name.
    :type name: str
    :param timestamp: Start of aggregation period. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type timestamp: datetime
    :param interval: Length of aggregation period.  Interval must be multiple
     of 15 minutes and may not be zero. The value should be in ISO 8601 format
     (http://en.wikipedia.org/wiki/ISO_8601#Durations).
    :type interval: str
    :param country: Country to which this record data is related.
    :type country: str
    :param region: Country region to which this record data is related.
    :type region: str
    :param zip: Zip code to which this record data is related.
    :type zip: str
    :ivar user_id: User identifier path. /users/{userId}
    :vartype user_id: str
    :ivar product_id: Product identifier path. /products/{productId}
    :vartype product_id: str
    :param api_id: API identifier path. /apis/{apiId}
    :type api_id: str
    :param operation_id: Operation identifier path.
     /apis/{apiId}/operations/{operationId}
    :type operation_id: str
    :param api_region: API region identifier.
    :type api_region: str
    :param subscription_id: Subscription identifier path.
     /subscriptions/{subscriptionId}
    :type subscription_id: str
    :param call_count_success: Number of successful calls. This includes calls
     returning HttpStatusCode <= 301 and HttpStatusCode.NotModified and
     HttpStatusCode.TemporaryRedirect
    :type call_count_success: int
    :param call_count_blocked: Number of calls blocked due to invalid
     credentials. This includes calls returning HttpStatusCode.Unauthorized and
     HttpStatusCode.Forbidden and HttpStatusCode.TooManyRequests
    :type call_count_blocked: int
    :param call_count_failed: Number of calls failed due to proxy or backend
     errors. This includes calls returning HttpStatusCode.BadRequest(400) and
     any Code between HttpStatusCode.InternalServerError (500) and 600
    :type call_count_failed: int
    :param call_count_other: Number of other calls.
    :type call_count_other: int
    :param call_count_total: Total number of calls.
    :type call_count_total: int
    :param bandwidth: Bandwidth consumed.
    :type bandwidth: long
    :param cache_hit_count: Number of times when content was served from cache
     policy.
    :type cache_hit_count: int
    :param cache_miss_count: Number of times content was fetched from backend.
    :type cache_miss_count: int
    :param api_time_avg: Average time it took to process request.
    :type api_time_avg: float
    :param api_time_min: Minimum time it took to process request.
    :type api_time_min: float
    :param api_time_max: Maximum time it took to process request.
    :type api_time_max: float
    :param service_time_avg: Average time it took to process request on
     backend.
    :type service_time_avg: float
    :param service_time_min: Minimum time it took to process request on
     backend.
    :type service_time_min: float
    :param service_time_max: Maximum time it took to process request on
     backend.
    :type service_time_max: float
    """

    _validation = {
        'user_id': {'readonly': True},
        'product_id': {'readonly': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
        'interval': {'key': 'interval', 'type': 'str'},
        'country': {'key': 'country', 'type': 'str'},
        'region': {'key': 'region', 'type': 'str'},
        'zip': {'key': 'zip', 'type': 'str'},
        'user_id': {'key': 'userId', 'type': 'str'},
        'product_id': {'key': 'productId', 'type': 'str'},
        'api_id': {'key': 'apiId', 'type': 'str'},
        'operation_id': {'key': 'operationId', 'type': 'str'},
        'api_region': {'key': 'apiRegion', 'type': 'str'},
        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
        'call_count_success': {'key': 'callCountSuccess', 'type': 'int'},
        'call_count_blocked': {'key': 'callCountBlocked', 'type': 'int'},
        'call_count_failed': {'key': 'callCountFailed', 'type': 'int'},
        'call_count_other': {'key': 'callCountOther', 'type': 'int'},
        'call_count_total': {'key': 'callCountTotal', 'type': 'int'},
        'bandwidth': {'key': 'bandwidth', 'type': 'long'},
        'cache_hit_count': {'key': 'cacheHitCount', 'type': 'int'},
        'cache_miss_count': {'key': 'cacheMissCount', 'type': 'int'},
        'api_time_avg': {'key': 'apiTimeAvg', 'type': 'float'},
        'api_time_min': {'key': 'apiTimeMin', 'type': 'float'},
        'api_time_max': {'key': 'apiTimeMax', 'type': 'float'},
        'service_time_avg': {'key': 'serviceTimeAvg', 'type': 'float'},
        'service_time_min': {'key': 'serviceTimeMin', 'type': 'float'},
        'service_time_max': {'key': 'serviceTimeMax', 'type': 'float'},
    }

    def __init__(self, *, name: str=None, timestamp=None, interval: str=None, country: str=None, region: str=None, zip: str=None, api_id: str=None, operation_id: str=None, api_region: str=None, subscription_id: str=None, call_count_success: int=None, call_count_blocked: int=None, call_count_failed: int=None, call_count_other: int=None, call_count_total: int=None, bandwidth: int=None, cache_hit_count: int=None, cache_miss_count: int=None, api_time_avg: float=None, api_time_min: float=None, api_time_max: float=None, service_time_avg: float=None, service_time_min: float=None, service_time_max: float=None, **kwargs) -> None:
        super(ReportRecordContract, self).__init__(**kwargs)
        self.name = name
        self.timestamp = timestamp
        self.interval = interval
        self.country = country
        self.region = region
        self.zip = zip
        self.user_id = None
        self.product_id = None
        self.api_id = api_id
        self.operation_id = operation_id
        self.api_region = api_region
        self.subscription_id = subscription_id
        self.call_count_success = call_count_success
        self.call_count_blocked = call_count_blocked
        self.call_count_failed = call_count_failed
        self.call_count_other = call_count_other
        self.call_count_total = call_count_total
        self.bandwidth = bandwidth
        self.cache_hit_count = cache_hit_count
        self.cache_miss_count = cache_miss_count
        self.api_time_avg = api_time_avg
        self.api_time_min = api_time_min
        self.api_time_max = api_time_max
        self.service_time_avg = service_time_avg
        self.service_time_min = service_time_min
        self.service_time_max = service_time_max


class RepresentationContract(Model):
    """Operation request/response representation details.

    All required parameters must be populated in order to send to Azure.

    :param content_type: Required. Specifies a registered or custom content
     type for this representation, e.g. application/xml.
    :type content_type: str
    :param sample: An example of the representation.
    :type sample: str
    :param schema_id: Schema identifier. Applicable only if 'contentType'
     value is neither 'application/x-www-form-urlencoded' nor
     'multipart/form-data'.
    :type schema_id: str
    :param type_name: Type name defined by the schema. Applicable only if
     'contentType' value is neither 'application/x-www-form-urlencoded' nor
     'multipart/form-data'.
    :type type_name: str
    :param form_parameters: Collection of form parameters. Required if
     'contentType' value is either 'application/x-www-form-urlencoded' or
     'multipart/form-data'..
    :type form_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    """

    _validation = {
        'content_type': {'required': True},
    }

    _attribute_map = {
        'content_type': {'key': 'contentType', 'type': 'str'},
        'sample': {'key': 'sample', 'type': 'str'},
        'schema_id': {'key': 'schemaId', 'type': 'str'},
        'type_name': {'key': 'typeName', 'type': 'str'},
        'form_parameters': {'key': 'formParameters', 'type': '[ParameterContract]'},
    }

    def __init__(self, *, content_type: str, sample: str=None, schema_id: str=None, type_name: str=None, form_parameters=None, **kwargs) -> None:
        super(RepresentationContract, self).__init__(**kwargs)
        self.content_type = content_type
        self.sample = sample
        self.schema_id = schema_id
        self.type_name = type_name
        self.form_parameters = form_parameters


class RequestContract(Model):
    """Operation request details.

    :param description: Operation request description.
    :type description: str
    :param query_parameters: Collection of operation request query parameters.
    :type query_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param headers: Collection of operation request headers.
    :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param representations: Collection of operation request representations.
    :type representations:
     list[~azure.mgmt.apimanagement.models.RepresentationContract]
    """

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'query_parameters': {'key': 'queryParameters', 'type': '[ParameterContract]'},
        'headers': {'key': 'headers', 'type': '[ParameterContract]'},
        'representations': {'key': 'representations', 'type': '[RepresentationContract]'},
    }

    def __init__(self, *, description: str=None, query_parameters=None, headers=None, representations=None, **kwargs) -> None:
        super(RequestContract, self).__init__(**kwargs)
        self.description = description
        self.query_parameters = query_parameters
        self.headers = headers
        self.representations = representations


class RequestReportRecordContract(Model):
    """Request Report data.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param api_id: API identifier path. /apis/{apiId}
    :type api_id: str
    :param operation_id: Operation identifier path.
     /apis/{apiId}/operations/{operationId}
    :type operation_id: str
    :ivar product_id: Product identifier path. /products/{productId}
    :vartype product_id: str
    :ivar user_id: User identifier path. /users/{userId}
    :vartype user_id: str
    :param method: The HTTP method associated with this request..
    :type method: str
    :param url: The full URL associated with this request.
    :type url: str
    :param ip_address: The client IP address associated with this request.
    :type ip_address: str
    :param backend_response_code: The HTTP status code received by the gateway
     as a result of forwarding this request to the backend.
    :type backend_response_code: str
    :param response_code: The HTTP status code returned by the gateway.
    :type response_code: int
    :param response_size: The size of the response returned by the gateway.
    :type response_size: int
    :param timestamp: The date and time when this request was received by the
     gateway in ISO 8601 format.
    :type timestamp: datetime
    :param cache: Specifies if response cache was involved in generating the
     response. If the value is none, the cache was not used. If the value is
     hit, cached response was returned. If the value is miss, the cache was
     used but lookup resulted in a miss and request was fulfilled by the
     backend.
    :type cache: str
    :param api_time: The total time it took to process this request.
    :type api_time: float
    :param service_time: he time it took to forward this request to the
     backend and get the response back.
    :type service_time: float
    :param api_region: Azure region where the gateway that processed this
     request is located.
    :type api_region: str
    :param subscription_id: Subscription identifier path.
     /subscriptions/{subscriptionId}
    :type subscription_id: str
    :param request_id: Request Identifier.
    :type request_id: str
    :param request_size: The size of this request..
    :type request_size: int
    """

    _validation = {
        'product_id': {'readonly': True},
        'user_id': {'readonly': True},
    }

    _attribute_map = {
        'api_id': {'key': 'apiId', 'type': 'str'},
        'operation_id': {'key': 'operationId', 'type': 'str'},
        'product_id': {'key': 'productId', 'type': 'str'},
        'user_id': {'key': 'userId', 'type': 'str'},
        'method': {'key': 'method', 'type': 'str'},
        'url': {'key': 'url', 'type': 'str'},
        'ip_address': {'key': 'ipAddress', 'type': 'str'},
        'backend_response_code': {'key': 'backendResponseCode', 'type': 'str'},
        'response_code': {'key': 'responseCode', 'type': 'int'},
        'response_size': {'key': 'responseSize', 'type': 'int'},
        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
        'cache': {'key': 'cache', 'type': 'str'},
        'api_time': {'key': 'apiTime', 'type': 'float'},
        'service_time': {'key': 'serviceTime', 'type': 'float'},
        'api_region': {'key': 'apiRegion', 'type': 'str'},
        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
        'request_id': {'key': 'requestId', 'type': 'str'},
        'request_size': {'key': 'requestSize', 'type': 'int'},
    }

    def __init__(self, *, api_id: str=None, operation_id: str=None, method: str=None, url: str=None, ip_address: str=None, backend_response_code: str=None, response_code: int=None, response_size: int=None, timestamp=None, cache: str=None, api_time: float=None, service_time: float=None, api_region: str=None, subscription_id: str=None, request_id: str=None, request_size: int=None, **kwargs) -> None:
        super(RequestReportRecordContract, self).__init__(**kwargs)
        self.api_id = api_id
        self.operation_id = operation_id
        self.product_id = None
        self.user_id = None
        self.method = method
        self.url = url
        self.ip_address = ip_address
        self.backend_response_code = backend_response_code
        self.response_code = response_code
        self.response_size = response_size
        self.timestamp = timestamp
        self.cache = cache
        self.api_time = api_time
        self.service_time = service_time
        self.api_region = api_region
        self.subscription_id = subscription_id
        self.request_id = request_id
        self.request_size = request_size


class ResourceLocationDataContract(Model):
    """Resource location data properties.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. A canonical name for the geographic or physical
     location.
    :type name: str
    :param city: The city or locality where the resource is located.
    :type city: str
    :param district: The district, state, or province where the resource is
     located.
    :type district: str
    :param country_or_region: The country or region where the resource is
     located.
    :type country_or_region: str
    """

    _validation = {
        'name': {'required': True, 'max_length': 256},
        'city': {'max_length': 256},
        'district': {'max_length': 256},
        'country_or_region': {'max_length': 256},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'city': {'key': 'city', 'type': 'str'},
        'district': {'key': 'district', 'type': 'str'},
        'country_or_region': {'key': 'countryOrRegion', 'type': 'str'},
    }

    def __init__(self, *, name: str, city: str=None, district: str=None, country_or_region: str=None, **kwargs) -> None:
        super(ResourceLocationDataContract, self).__init__(**kwargs)
        self.name = name
        self.city = city
        self.district = district
        self.country_or_region = country_or_region


class ResourceSku(Model):
    """Describes an available API Management SKU.

    :param name: Name of the Sku. Possible values include: 'Developer',
     'Standard', 'Premium', 'Basic', 'Consumption'
    :type name: str or ~azure.mgmt.apimanagement.models.SkuType
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name=None, **kwargs) -> None:
        super(ResourceSku, self).__init__(**kwargs)
        self.name = name


class ResourceSkuCapacity(Model):
    """Describes scaling information of a SKU.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar minimum: The minimum capacity.
    :vartype minimum: int
    :ivar maximum: The maximum capacity that can be set.
    :vartype maximum: int
    :ivar default: The default capacity.
    :vartype default: int
    :ivar scale_type: The scale type applicable to the sku. Possible values
     include: 'automatic', 'manual', 'none'
    :vartype scale_type: str or
     ~azure.mgmt.apimanagement.models.ResourceSkuCapacityScaleType
    """

    _validation = {
        'minimum': {'readonly': True},
        'maximum': {'readonly': True},
        'default': {'readonly': True},
        'scale_type': {'readonly': True},
    }

    _attribute_map = {
        'minimum': {'key': 'minimum', 'type': 'int'},
        'maximum': {'key': 'maximum', 'type': 'int'},
        'default': {'key': 'default', 'type': 'int'},
        'scale_type': {'key': 'scaleType', 'type': 'str'},
    }

    def __init__(self, **kwargs) -> None:
        super(ResourceSkuCapacity, self).__init__(**kwargs)
        self.minimum = None
        self.maximum = None
        self.default = None
        self.scale_type = None


class ResourceSkuResult(Model):
    """Describes an available API Management service SKU.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar resource_type: The type of resource the SKU applies to.
    :vartype resource_type: str
    :ivar sku: Specifies API Management SKU.
    :vartype sku: ~azure.mgmt.apimanagement.models.ResourceSku
    :ivar capacity: Specifies the number of API Management units.
    :vartype capacity: ~azure.mgmt.apimanagement.models.ResourceSkuCapacity
    """

    _validation = {
        'resource_type': {'readonly': True},
        'sku': {'readonly': True},
        'capacity': {'readonly': True},
    }

    _attribute_map = {
        'resource_type': {'key': 'resourceType', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ResourceSku'},
        'capacity': {'key': 'capacity', 'type': 'ResourceSkuCapacity'},
    }

    def __init__(self, **kwargs) -> None:
        super(ResourceSkuResult, self).__init__(**kwargs)
        self.resource_type = None
        self.sku = None
        self.capacity = None


class ResponseContract(Model):
    """Operation response details.

    All required parameters must be populated in order to send to Azure.

    :param status_code: Required. Operation response HTTP status code.
    :type status_code: int
    :param description: Operation response description.
    :type description: str
    :param representations: Collection of operation response representations.
    :type representations:
     list[~azure.mgmt.apimanagement.models.RepresentationContract]
    :param headers: Collection of operation response headers.
    :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract]
    """

    _validation = {
        'status_code': {'required': True},
    }

    _attribute_map = {
        'status_code': {'key': 'statusCode', 'type': 'int'},
        'description': {'key': 'description', 'type': 'str'},
        'representations': {'key': 'representations', 'type': '[RepresentationContract]'},
        'headers': {'key': 'headers', 'type': '[ParameterContract]'},
    }

    def __init__(self, *, status_code: int, description: str=None, representations=None, headers=None, **kwargs) -> None:
        super(ResponseContract, self).__init__(**kwargs)
        self.status_code = status_code
        self.description = description
        self.representations = representations
        self.headers = headers


class SamplingSettings(Model):
    """Sampling settings for Diagnostic.

    :param sampling_type: Sampling type. Possible values include: 'fixed'
    :type sampling_type: str or ~azure.mgmt.apimanagement.models.SamplingType
    :param percentage: Rate of sampling for fixed-rate sampling.
    :type percentage: float
    """

    _validation = {
        'percentage': {'maximum': 100, 'minimum': 0},
    }

    _attribute_map = {
        'sampling_type': {'key': 'samplingType', 'type': 'str'},
        'percentage': {'key': 'percentage', 'type': 'float'},
    }

    def __init__(self, *, sampling_type=None, percentage: float=None, **kwargs) -> None:
        super(SamplingSettings, self).__init__(**kwargs)
        self.sampling_type = sampling_type
        self.percentage = percentage


class SaveConfigurationParameter(Model):
    """Save Tenant Configuration Contract details.

    All required parameters must be populated in order to send to Azure.

    :param branch: Required. The name of the Git branch in which to commit the
     current configuration snapshot.
    :type branch: str
    :param force: The value if true, the current configuration database is
     committed to the Git repository, even if the Git repository has newer
     changes that would be overwritten.
    :type force: bool
    """

    _validation = {
        'branch': {'required': True},
    }

    _attribute_map = {
        'branch': {'key': 'properties.branch', 'type': 'str'},
        'force': {'key': 'properties.force', 'type': 'bool'},
    }

    def __init__(self, *, branch: str, force: bool=None, **kwargs) -> None:
        super(SaveConfigurationParameter, self).__init__(**kwargs)
        self.branch = branch
        self.force = force


class SchemaContract(Resource):
    """Schema Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param content_type: Required. Must be a valid a media type used in a
     Content-Type header as defined in the RFC 2616. Media type of the schema
     document (e.g. application/json, application/xml). </br> - `Swagger`
     Schema use `application/vnd.ms-azure-apim.swagger.definitions+json` </br>
     - `WSDL` Schema use `application/vnd.ms-azure-apim.xsd+xml` </br> -
     `OpenApi` Schema use `application/vnd.oai.openapi.components+json` </br> -
     `WADL Schema` use `application/vnd.ms-azure-apim.wadl.grammars+xml`.
    :type content_type: str
    :param value: Json escaped string defining the document representing the
     Schema. Used for schemas other than Swagger/OpenAPI.
    :type value: str
    :param definitions: Types definitions. Used for Swagger/OpenAPI schemas
     only, null otherwise.
    :type definitions: object
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'content_type': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'content_type': {'key': 'properties.contentType', 'type': 'str'},
        'value': {'key': 'properties.document.value', 'type': 'str'},
        'definitions': {'key': 'properties.document.definitions', 'type': 'object'},
    }

    def __init__(self, *, content_type: str, value: str=None, definitions=None, **kwargs) -> None:
        super(SchemaContract, self).__init__(**kwargs)
        self.content_type = content_type
        self.value = value
        self.definitions = definitions


class SubscriptionContract(Resource):
    """Subscription details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param owner_id: The user resource identifier of the subscription owner.
     The value is a valid relative URL in the format of /users/{userId} where
     {userId} is a user identifier.
    :type owner_id: str
    :param scope: Required. Scope like /products/{productId} or /apis or
     /apis/{apiId}.
    :type scope: str
    :param display_name: The name of the subscription, or null if the
     subscription has no name.
    :type display_name: str
    :param state: Required. Subscription state. Possible states are * active –
     the subscription is active, * suspended – the subscription is blocked, and
     the subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :ivar created_date: Subscription creation date. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :vartype created_date: datetime
    :param start_date: Subscription activation date. The setting is for audit
     purposes only and the subscription is not automatically activated. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type start_date: datetime
    :param expiration_date: Subscription expiration date. The setting is for
     audit purposes only and the subscription is not automatically expired. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    :param end_date: Date when subscription was cancelled or expired. The
     setting is for audit purposes only and the subscription is not
     automatically cancelled. The subscription lifecycle can be managed by
     using the `state` property. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type end_date: datetime
    :param notification_date: Upcoming subscription expiration notification
     date. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type notification_date: datetime
    :param primary_key: Subscription primary key. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type primary_key: str
    :param secondary_key: Subscription secondary key. This property will not
     be filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type secondary_key: str
    :param state_comment: Optional subscription comment added by an
     administrator.
    :type state_comment: str
    :param allow_tracing: Determines whether tracing is enabled
    :type allow_tracing: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'scope': {'required': True},
        'display_name': {'max_length': 100, 'min_length': 0},
        'state': {'required': True},
        'created_date': {'readonly': True},
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'start_date': {'key': 'properties.startDate', 'type': 'iso-8601'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
        'end_date': {'key': 'properties.endDate', 'type': 'iso-8601'},
        'notification_date': {'key': 'properties.notificationDate', 'type': 'iso-8601'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state_comment': {'key': 'properties.stateComment', 'type': 'str'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, scope: str, state, owner_id: str=None, display_name: str=None, start_date=None, expiration_date=None, end_date=None, notification_date=None, primary_key: str=None, secondary_key: str=None, state_comment: str=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionContract, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.display_name = display_name
        self.state = state
        self.created_date = None
        self.start_date = start_date
        self.expiration_date = expiration_date
        self.end_date = end_date
        self.notification_date = notification_date
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state_comment = state_comment
        self.allow_tracing = allow_tracing


class SubscriptionCreateParameters(Model):
    """Subscription create details.

    All required parameters must be populated in order to send to Azure.

    :param owner_id: User (user id path) for whom subscription is being
     created in form /users/{userId}
    :type owner_id: str
    :param scope: Required. Scope like /products/{productId} or /apis or
     /apis/{apiId}.
    :type scope: str
    :param display_name: Required. Subscription name.
    :type display_name: str
    :param primary_key: Primary subscription key. If not specified during
     request key will be generated automatically.
    :type primary_key: str
    :param secondary_key: Secondary subscription key. If not specified during
     request key will be generated automatically.
    :type secondary_key: str
    :param state: Initial subscription state. If no value is specified,
     subscription is created with Submitted state. Possible states are * active
     – the subscription is active, * suspended – the subscription is blocked,
     and the subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :param allow_tracing: Determines whether tracing can be enabled
    :type allow_tracing: bool
    """

    _validation = {
        'scope': {'required': True},
        'display_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, scope: str, display_name: str, owner_id: str=None, primary_key: str=None, secondary_key: str=None, state=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionCreateParameters, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.display_name = display_name
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state = state
        self.allow_tracing = allow_tracing


class SubscriptionKeyParameterNamesContract(Model):
    """Subscription key parameter names details.

    :param header: Subscription key header name.
    :type header: str
    :param query: Subscription key query string parameter name.
    :type query: str
    """

    _attribute_map = {
        'header': {'key': 'header', 'type': 'str'},
        'query': {'key': 'query', 'type': 'str'},
    }

    def __init__(self, *, header: str=None, query: str=None, **kwargs) -> None:
        super(SubscriptionKeyParameterNamesContract, self).__init__(**kwargs)
        self.header = header
        self.query = query


class SubscriptionKeysContract(Model):
    """Subscription keys.

    :param primary_key: Subscription primary key.
    :type primary_key: str
    :param secondary_key: Subscription secondary key.
    :type secondary_key: str
    """

    _validation = {
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'primary_key': {'key': 'primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    }

    def __init__(self, *, primary_key: str=None, secondary_key: str=None, **kwargs) -> None:
        super(SubscriptionKeysContract, self).__init__(**kwargs)
        self.primary_key = primary_key
        self.secondary_key = secondary_key


class SubscriptionsDelegationSettingsProperties(Model):
    """Subscriptions delegation settings properties.

    :param enabled: Enable or disable delegation for subscriptions.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(SubscriptionsDelegationSettingsProperties, self).__init__(**kwargs)
        self.enabled = enabled


class SubscriptionUpdateParameters(Model):
    """Subscription update details.

    :param owner_id: User identifier path: /users/{userId}
    :type owner_id: str
    :param scope: Scope like /products/{productId} or /apis or /apis/{apiId}
    :type scope: str
    :param expiration_date: Subscription expiration date. The setting is for
     audit purposes only and the subscription is not automatically expired. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    :param display_name: Subscription name.
    :type display_name: str
    :param primary_key: Primary subscription key.
    :type primary_key: str
    :param secondary_key: Secondary subscription key.
    :type secondary_key: str
    :param state: Subscription state. Possible states are * active – the
     subscription is active, * suspended – the subscription is blocked, and the
     subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :param state_comment: Comments describing subscription state change by the
     administrator.
    :type state_comment: str
    :param allow_tracing: Determines whether tracing can be enabled
    :type allow_tracing: bool
    """

    _validation = {
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'state_comment': {'key': 'properties.stateComment', 'type': 'str'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, owner_id: str=None, scope: str=None, expiration_date=None, display_name: str=None, primary_key: str=None, secondary_key: str=None, state=None, state_comment: str=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionUpdateParameters, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.expiration_date = expiration_date
        self.display_name = display_name
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state = state
        self.state_comment = state_comment
        self.allow_tracing = allow_tracing


class TagContract(Resource):
    """Tag Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. Tag name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, **kwargs) -> None:
        super(TagContract, self).__init__(**kwargs)
        self.display_name = display_name


class TagCreateUpdateParameters(Model):
    """Parameters supplied to Create/Update Tag operations.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Tag name.
    :type display_name: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, **kwargs) -> None:
        super(TagCreateUpdateParameters, self).__init__(**kwargs)
        self.display_name = display_name


class TagDescriptionContract(Resource):
    """Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the Tag.
    :type description: str
    :param external_docs_url: Absolute URL of external resources describing
     the tag.
    :type external_docs_url: str
    :param external_docs_description: Description of the external resources
     describing the tag.
    :type external_docs_description: str
    :param tag_id: Identifier of the tag in the form of /tags/{tagId}
    :type tag_id: str
    :param display_name: Tag name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'external_docs_url': {'max_length': 2000},
        'display_name': {'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'external_docs_url': {'key': 'properties.externalDocsUrl', 'type': 'str'},
        'external_docs_description': {'key': 'properties.externalDocsDescription', 'type': 'str'},
        'tag_id': {'key': 'properties.tagId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, external_docs_url: str=None, external_docs_description: str=None, tag_id: str=None, display_name: str=None, **kwargs) -> None:
        super(TagDescriptionContract, self).__init__(**kwargs)
        self.description = description
        self.external_docs_url = external_docs_url
        self.external_docs_description = external_docs_description
        self.tag_id = tag_id
        self.display_name = display_name


class TagDescriptionCreateParameters(Model):
    """Parameters supplied to the Create TagDescription operation.

    :param description: Description of the Tag.
    :type description: str
    :param external_docs_url: Absolute URL of external resources describing
     the tag.
    :type external_docs_url: str
    :param external_docs_description: Description of the external resources
     describing the tag.
    :type external_docs_description: str
    """

    _validation = {
        'external_docs_url': {'max_length': 2000},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'external_docs_url': {'key': 'properties.externalDocsUrl', 'type': 'str'},
        'external_docs_description': {'key': 'properties.externalDocsDescription', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, external_docs_url: str=None, external_docs_description: str=None, **kwargs) -> None:
        super(TagDescriptionCreateParameters, self).__init__(**kwargs)
        self.description = description
        self.external_docs_url = external_docs_url
        self.external_docs_description = external_docs_description


class TagResourceContract(Model):
    """TagResource contract properties.

    All required parameters must be populated in order to send to Azure.

    :param tag: Required. Tag associated with the resource.
    :type tag:
     ~azure.mgmt.apimanagement.models.TagTagResourceContractProperties
    :param api: Api associated with the tag.
    :type api:
     ~azure.mgmt.apimanagement.models.ApiTagResourceContractProperties
    :param operation: Operation associated with the tag.
    :type operation:
     ~azure.mgmt.apimanagement.models.OperationTagResourceContractProperties
    :param product: Product associated with the tag.
    :type product:
     ~azure.mgmt.apimanagement.models.ProductTagResourceContractProperties
    """

    _validation = {
        'tag': {'required': True},
    }

    _attribute_map = {
        'tag': {'key': 'tag', 'type': 'TagTagResourceContractProperties'},
        'api': {'key': 'api', 'type': 'ApiTagResourceContractProperties'},
        'operation': {'key': 'operation', 'type': 'OperationTagResourceContractProperties'},
        'product': {'key': 'product', 'type': 'ProductTagResourceContractProperties'},
    }

    def __init__(self, *, tag, api=None, operation=None, product=None, **kwargs) -> None:
        super(TagResourceContract, self).__init__(**kwargs)
        self.tag = tag
        self.api = api
        self.operation = operation
        self.product = product


class TagTagResourceContractProperties(Model):
    """Contract defining the Tag property in the Tag Resource Contract.

    :param id: Tag identifier
    :type id: str
    :param name: Tag Name
    :type name: str
    """

    _validation = {
        'name': {'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, name: str=None, **kwargs) -> None:
        super(TagTagResourceContractProperties, self).__init__(**kwargs)
        self.id = id
        self.name = name


class TenantConfigurationSyncStateContract(Model):
    """Tenant Configuration Synchronization State.

    :param branch: The name of Git branch.
    :type branch: str
    :param commit_id: The latest commit Id.
    :type commit_id: str
    :param is_export: value indicating if last sync was save (true) or deploy
     (false) operation.
    :type is_export: bool
    :param is_synced: value indicating if last synchronization was later than
     the configuration change.
    :type is_synced: bool
    :param is_git_enabled: value indicating whether Git configuration access
     is enabled.
    :type is_git_enabled: bool
    :param sync_date: The date of the latest synchronization. The date
     conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by
     the ISO 8601 standard.
    :type sync_date: datetime
    :param configuration_change_date: The date of the latest configuration
     change. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type configuration_change_date: datetime
    """

    _attribute_map = {
        'branch': {'key': 'branch', 'type': 'str'},
        'commit_id': {'key': 'commitId', 'type': 'str'},
        'is_export': {'key': 'isExport', 'type': 'bool'},
        'is_synced': {'key': 'isSynced', 'type': 'bool'},
        'is_git_enabled': {'key': 'isGitEnabled', 'type': 'bool'},
        'sync_date': {'key': 'syncDate', 'type': 'iso-8601'},
        'configuration_change_date': {'key': 'configurationChangeDate', 'type': 'iso-8601'},
    }

    def __init__(self, *, branch: str=None, commit_id: str=None, is_export: bool=None, is_synced: bool=None, is_git_enabled: bool=None, sync_date=None, configuration_change_date=None, **kwargs) -> None:
        super(TenantConfigurationSyncStateContract, self).__init__(**kwargs)
        self.branch = branch
        self.commit_id = commit_id
        self.is_export = is_export
        self.is_synced = is_synced
        self.is_git_enabled = is_git_enabled
        self.sync_date = sync_date
        self.configuration_change_date = configuration_change_date


class TermsOfServiceProperties(Model):
    """Terms of service contract properties.

    :param text: A terms of service text.
    :type text: str
    :param enabled: Display terms of service during a sign-up process.
    :type enabled: bool
    :param consent_required: Ask user for consent to the terms of service.
    :type consent_required: bool
    """

    _attribute_map = {
        'text': {'key': 'text', 'type': 'str'},
        'enabled': {'key': 'enabled', 'type': 'bool'},
        'consent_required': {'key': 'consentRequired', 'type': 'bool'},
    }

    def __init__(self, *, text: str=None, enabled: bool=None, consent_required: bool=None, **kwargs) -> None:
        super(TermsOfServiceProperties, self).__init__(**kwargs)
        self.text = text
        self.enabled = enabled
        self.consent_required = consent_required


class TokenBodyParameterContract(Model):
    """OAuth acquire token request body parameter (www-url-form-encoded).

    All required parameters must be populated in order to send to Azure.

    :param name: Required. body parameter name.
    :type name: str
    :param value: Required. body parameter value.
    :type value: str
    """

    _validation = {
        'name': {'required': True},
        'value': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, name: str, value: str, **kwargs) -> None:
        super(TokenBodyParameterContract, self).__init__(**kwargs)
        self.name = name
        self.value = value


class UserContract(Resource):
    """User details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param first_name: First name.
    :type first_name: str
    :param last_name: Last name.
    :type last_name: str
    :param email: Email address.
    :type email: str
    :param registration_date: Date of user registration. The date conforms to
     the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type registration_date: datetime
    :ivar groups: Collection of groups user is part of.
    :vartype groups:
     list[~azure.mgmt.apimanagement.models.GroupContractProperties]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'groups': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'registration_date': {'key': 'properties.registrationDate', 'type': 'iso-8601'},
        'groups': {'key': 'properties.groups', 'type': '[GroupContractProperties]'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, first_name: str=None, last_name: str=None, email: str=None, registration_date=None, **kwargs) -> None:
        super(UserContract, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.registration_date = registration_date
        self.groups = None


class UserCreateParameters(Model):
    """User create details.

    All required parameters must be populated in order to send to Azure.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param email: Required. Email address. Must not be empty and must be
     unique within the service instance.
    :type email: str
    :param first_name: Required. First name.
    :type first_name: str
    :param last_name: Required. Last name.
    :type last_name: str
    :param password: <PASSWORD>. If no value is provided, a default
     password is generated.
    :type password: str
    :param app_type: Determines the type of application which send the create
     user request. Default is old publisher portal. Possible values include:
     'developerPortal'
    :type app_type: str or ~azure.mgmt.apimanagement.models.AppType
    :param confirmation: Determines the type of confirmation e-mail that will
     be sent to the newly created user. Possible values include: 'signup',
     'invite'
    :type confirmation: str or ~azure.mgmt.apimanagement.models.Confirmation
    """

    _validation = {
        'email': {'required': True, 'max_length': 254, 'min_length': 1},
        'first_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'last_name': {'required': True, 'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
        'app_type': {'key': 'properties.appType', 'type': 'str'},
        'confirmation': {'key': 'properties.confirmation', 'type': 'str'},
    }

    def __init__(self, *, email: str, first_name: str, last_name: str, state="active", note: str=None, identities=None, password: str=None, app_type=None, confirmation=None, **kwargs) -> None:
        super(UserCreateParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.email = email
        self.first_name = first_name
        self.last_name = last_name
        self.password = password
        self.app_type = app_type
        self.confirmation = confirmation


class UserEntityBaseParameters(Model):
    """User Entity Base Parameters set.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    """

    _attribute_map = {
        'state': {'key': 'state', 'type': 'str'},
        'note': {'key': 'note', 'type': 'str'},
        'identities': {'key': 'identities', 'type': '[UserIdentityContract]'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, **kwargs) -> None:
        super(UserEntityBaseParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities


class UserIdentityContract(Model):
    """User identity details.

    :param provider: Identity provider name.
    :type provider: str
    :param id: Identifier value within provider.
    :type id: str
    """

    _attribute_map = {
        'provider': {'key': 'provider', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
    }

    def __init__(self, *, provider: str=None, id: str=None, **kwargs) -> None:
        super(UserIdentityContract, self).__init__(**kwargs)
        self.provider = provider
        self.id = id


class UserIdentityProperties(Model):
    """UserIdentityProperties.

    :param principal_id: The principal id of user assigned identity.
    :type principal_id: str
    :param client_id: The client id of user assigned identity.
    :type client_id: str
    """

    _attribute_map = {
        'principal_id': {'key': 'principalId', 'type': 'str'},
        'client_id': {'key': 'clientId', 'type': 'str'},
    }

    def __init__(self, *, principal_id: str=None, client_id: str=None, **kwargs) -> None:
        super(UserIdentityProperties, self).__init__(**kwargs)
        self.principal_id = principal_id
        self.client_id = client_id


class UserTokenParameters(Model):
    """Get User Token parameters.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key to be used to generate token for user.
     Possible values include: 'primary', 'secondary'. Default value: "primary"
     .
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    :param expiry: Required. The Expiry time of the Token. Maximum token
     expiry time is set to 30 days. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type expiry: datetime
    """

    _validation = {
        'key_type': {'required': True},
        'expiry': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'properties.keyType', 'type': 'KeyType'},
        'expiry': {'key': 'properties.expiry', 'type': 'iso-8601'},
    }

    def __init__(self, *, expiry, key_type="primary", **kwargs) -> None:
        super(UserTokenParameters, self).__init__(**kwargs)
        self.key_type = key_type
        self.expiry = expiry


class UserTokenResult(Model):
    """Get User Token response details.

    :param value: Shared Access Authorization token for the User.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(UserTokenResult, self).__init__(**kwargs)
        self.value = value


class UserUpdateParameters(Model):
    """User update parameters.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param email: Email address. Must not be empty and must be unique within
     the service instance.
    :type email: str
    :param password: <PASSWORD>.
    :type password: str
    :param first_name: First name.
    :type first_name: str
    :param last_name: Last name.
    :type last_name: str
    """

    _validation = {
        'email': {'max_length': 254, 'min_length': 1},
        'first_name': {'max_length': 100, 'min_length': 1},
        'last_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, email: str=None, password: str=None, first_name: str=None, last_name: str=None, **kwargs) -> None:
        super(UserUpdateParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.email = email
        self.password = password
        self.first_name = first_name
        self.last_name = last_name


class VirtualNetworkConfiguration(Model):
    """Configuration of a virtual network to which API Management service is
    deployed.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar vnetid: The virtual network ID. This is typically a GUID. Expect a
     null GUID by default.
    :vartype vnetid: str
    :ivar subnetname: The name of the subnet.
    :vartype subnetname: str
    :param subnet_resource_id: The full resource ID of a subnet in a virtual
     network to deploy the API Management service in.
    :type subnet_resource_id: str
    """

    _validation = {
        'vnetid': {'readonly': True},
        'subnetname': {'readonly': True},
        'subnet_resource_id': {'pattern': r'^/subscriptions/[^/]*/resourceGroups/[^/]*/providers/Microsoft.(ClassicNetwork|Network)/virtualNetworks/[^/]*/subnets/[^/]*$'},
    }

    _attribute_map = {
        'vnetid': {'key': 'vnetid', 'type': 'str'},
        'subnetname': {'key': 'subnetname', 'type': 'str'},
        'subnet_resource_id': {'key': 'subnetResourceId', 'type': 'str'},
    }

    def __init__(self, *, subnet_resource_id: str=None, **kwargs) -> None:
        super(VirtualNetworkConfiguration, self).__init__(**kwargs)
        self.vnetid = None
        self.subnetname = None
        self.subnet_resource_id = subnet_resource_id


class X509CertificateName(Model):
    """Properties of server X509Names.

    :param name: Common Name of the Certificate.
    :type name: str
    :param issuer_certificate_thumbprint: Thumbprint for the Issuer of the
     Certificate.
    :type issuer_certificate_thumbprint: str
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'issuer_certificate_thumbprint': {'key': 'issuerCertificateThumbprint', 'type': 'str'},
    }

    def __init__(self, *, name: str=None, issuer_certificate_thumbprint: str=None, **kwargs) -> None:
        super(X509CertificateName, self).__init__(**kwargs)
        self.name = name
        self.issuer_certificate_thumbprint = issuer_certificate_thumbprint

# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model
from msrest.exceptions import HttpOperationError


class AccessInformationContract(Model):
    """Tenant access information contract of the API Management service.

    :param id: Identifier.
    :type id: str
    :param primary_key: Primary access key. This property will not be filled
     on 'GET' operations! Use '/listSecrets' POST request to get the value.
    :type primary_key: str
    :param secondary_key: Secondary access key. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type secondary_key: str
    :param enabled: Determines whether direct access is enabled.
    :type enabled: bool
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'primary_key': {'key': 'primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, id: str=None, primary_key: str=None, secondary_key: str=None, enabled: bool=None, **kwargs) -> None:
        super(AccessInformationContract, self).__init__(**kwargs)
        self.id = id
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.enabled = enabled


class AccessInformationUpdateParameters(Model):
    """Tenant access information update parameters.

    :param enabled: Determines whether direct access is enabled.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(AccessInformationUpdateParameters, self).__init__(**kwargs)
        self.enabled = enabled


class AdditionalLocation(Model):
    """Description of an additional API Management resource location.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param location: Required. The location name of the additional region
     among Azure Data center regions.
    :type location: str
    :param sku: Required. SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in the additional location. Available only for
     Basic, Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service which is deployed in an Internal Virtual
     Network in a particular additional location. Available only for Basic,
     Standard and Premium SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration for
     the location.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Region.
    :vartype gateway_regional_url: str
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     this additional location. Default value: False .
    :type disable_gateway: bool
    """

    _validation = {
        'location': {'required': True},
        'sku': {'required': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
    }

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'public_ip_addresses': {'key': 'publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'gateway_regional_url': {'key': 'gatewayRegionalUrl', 'type': 'str'},
        'disable_gateway': {'key': 'disableGateway', 'type': 'bool'},
    }

    def __init__(self, *, location: str, sku, virtual_network_configuration=None, disable_gateway: bool=False, **kwargs) -> None:
        super(AdditionalLocation, self).__init__(**kwargs)
        self.location = location
        self.sku = sku
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.gateway_regional_url = None
        self.disable_gateway = disable_gateway


class Resource(Model):
    """The Resource definition.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
    }

    def __init__(self, **kwargs) -> None:
        super(Resource, self).__init__(**kwargs)
        self.id = None
        self.name = None
        self.type = None


class ApiContract(Resource):
    """Api details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'properties.sourceApiId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'properties.apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, **kwargs) -> None:
        super(ApiContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set


class ApiEntityBaseContract(Model):
    """API base contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, **kwargs) -> None:
        super(ApiEntityBaseContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required


class ApiContractProperties(ApiEntityBaseContract):
    """Api Entity Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'sourceApiId', 'type': 'str'},
        'display_name': {'key': 'displayName', 'type': 'str'},
        'service_url': {'key': 'serviceUrl', 'type': 'str'},
        'path': {'key': 'path', 'type': 'str'},
        'protocols': {'key': 'protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, **kwargs) -> None:
        super(ApiContractProperties, self).__init__(description=description, authentication_settings=authentication_settings, subscription_key_parameter_names=subscription_key_parameter_names, api_type=api_type, api_revision=api_revision, api_version=api_version, is_current=is_current, api_revision_description=api_revision_description, api_version_description=api_version_description, api_version_set_id=api_version_set_id, subscription_required=subscription_required, **kwargs)
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set


class ApiCreateOrUpdateParameter(Model):
    """API Create or Update Parameters.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param source_api_id: API identifier of the source API.
    :type source_api_id: str
    :param display_name: API name. Must be 1 to 300 characters long.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API. Cannot be more than 2000 characters long.
    :type service_url: str
    :param path: Required. Relative URL uniquely identifying this API and all
     of its resource paths within the API Management service instance. It is
     appended to the API endpoint base URL specified during the service
     instance creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    :param value: Content value when Importing an API.
    :type value: str
    :param format: Format of the Content in which the API is getting imported.
     Possible values include: 'wadl-xml', 'wadl-link-json', 'swagger-json',
     'swagger-link-json', 'wsdl', 'wsdl-link', 'openapi', 'openapi+json',
     'openapi-link', 'openapi+json-link'
    :type format: str or ~azure.mgmt.apimanagement.models.ContentFormat
    :param wsdl_selector: Criteria to limit import of WSDL to a subset of the
     document.
    :type wsdl_selector:
     ~azure.mgmt.apimanagement.models.ApiCreateOrUpdatePropertiesWsdlSelector
    :param soap_api_type: Type of Api to create.
     * `http` creates a SOAP to REST API
     * `soap` creates a SOAP pass-through API. Possible values include:
     'SoapToRest', 'SoapPassThrough'
    :type soap_api_type: str or ~azure.mgmt.apimanagement.models.SoapApiType
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 0},
        'path': {'required': True, 'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'source_api_id': {'key': 'properties.sourceApiId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
        'api_version_set': {'key': 'properties.apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
        'value': {'key': 'properties.value', 'type': 'str'},
        'format': {'key': 'properties.format', 'type': 'str'},
        'wsdl_selector': {'key': 'properties.wsdlSelector', 'type': 'ApiCreateOrUpdatePropertiesWsdlSelector'},
        'soap_api_type': {'key': 'properties.apiType', 'type': 'str'},
    }

    def __init__(self, *, path: str, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, source_api_id: str=None, display_name: str=None, service_url: str=None, protocols=None, api_version_set=None, value: str=None, format=None, wsdl_selector=None, soap_api_type=None, **kwargs) -> None:
        super(ApiCreateOrUpdateParameter, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.source_api_id = source_api_id
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols
        self.api_version_set = api_version_set
        self.value = value
        self.format = format
        self.wsdl_selector = wsdl_selector
        self.soap_api_type = soap_api_type


class ApiCreateOrUpdatePropertiesWsdlSelector(Model):
    """Criteria to limit import of WSDL to a subset of the document.

    :param wsdl_service_name: Name of service to import from WSDL
    :type wsdl_service_name: str
    :param wsdl_endpoint_name: Name of endpoint(port) to import from WSDL
    :type wsdl_endpoint_name: str
    """

    _attribute_map = {
        'wsdl_service_name': {'key': 'wsdlServiceName', 'type': 'str'},
        'wsdl_endpoint_name': {'key': 'wsdlEndpointName', 'type': 'str'},
    }

    def __init__(self, *, wsdl_service_name: str=None, wsdl_endpoint_name: str=None, **kwargs) -> None:
        super(ApiCreateOrUpdatePropertiesWsdlSelector, self).__init__(**kwargs)
        self.wsdl_service_name = wsdl_service_name
        self.wsdl_endpoint_name = wsdl_endpoint_name


class ApiExportResult(Model):
    """API Export result.

    :param id: ResourceId of the API which was exported.
    :type id: str
    :param export_result_format: Format in which the Api Details are exported
     to the Storage Blob with Sas Key valid for 5 minutes. Possible values
     include: 'Swagger', 'Wsdl', 'Wadl', 'OpenApi'
    :type export_result_format: str or
     ~azure.mgmt.apimanagement.models.ExportResultFormat
    :param value: The object defining the schema of the exported Api Detail
    :type value: ~azure.mgmt.apimanagement.models.ApiExportResultValue
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'export_result_format': {'key': 'format', 'type': 'str'},
        'value': {'key': 'value', 'type': 'ApiExportResultValue'},
    }

    def __init__(self, *, id: str=None, export_result_format=None, value=None, **kwargs) -> None:
        super(ApiExportResult, self).__init__(**kwargs)
        self.id = id
        self.export_result_format = export_result_format
        self.value = value


class ApiExportResultValue(Model):
    """The object defining the schema of the exported Api Detail.

    :param link: Link to the Storage Blob containing the result of the export
     operation. The Blob Uri is only valid for 5 minutes.
    :type link: str
    """

    _attribute_map = {
        'link': {'key': 'link', 'type': 'str'},
    }

    def __init__(self, *, link: str=None, **kwargs) -> None:
        super(ApiExportResultValue, self).__init__(**kwargs)
        self.link = link


class ApiManagementServiceApplyNetworkConfigurationParameters(Model):
    """Parameter supplied to the Apply Network configuration operation.

    :param location: Location of the Api Management service to update for a
     multi-region service. For a service deployed in a single region, this
     parameter is not required.
    :type location: str
    """

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
    }

    def __init__(self, *, location: str=None, **kwargs) -> None:
        super(ApiManagementServiceApplyNetworkConfigurationParameters, self).__init__(**kwargs)
        self.location = location


class ApiManagementServiceBackupRestoreParameters(Model):
    """Parameters supplied to the Backup/Restore of an API Management service
    operation.

    All required parameters must be populated in order to send to Azure.

    :param storage_account: Required. Azure Cloud Storage account (used to
     place/retrieve the backup) name.
    :type storage_account: str
    :param access_key: Required. Azure Cloud Storage account (used to
     place/retrieve the backup) access key.
    :type access_key: str
    :param container_name: Required. Azure Cloud Storage blob container name
     used to place/retrieve the backup.
    :type container_name: str
    :param backup_name: Required. The name of the backup file to create.
    :type backup_name: str
    """

    _validation = {
        'storage_account': {'required': True},
        'access_key': {'required': True},
        'container_name': {'required': True},
        'backup_name': {'required': True},
    }

    _attribute_map = {
        'storage_account': {'key': 'storageAccount', 'type': 'str'},
        'access_key': {'key': 'accessKey', 'type': 'str'},
        'container_name': {'key': 'containerName', 'type': 'str'},
        'backup_name': {'key': 'backupName', 'type': 'str'},
    }

    def __init__(self, *, storage_account: str, access_key: str, container_name: str, backup_name: str, **kwargs) -> None:
        super(ApiManagementServiceBackupRestoreParameters, self).__init__(**kwargs)
        self.storage_account = storage_account
        self.access_key = access_key
        self.container_name = container_name
        self.backup_name = backup_name


class ApiManagementServiceBaseProperties(Model):
    """Base Properties of an API Management service resource description.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    """

    _validation = {
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
    }

    _attribute_map = {
        'notification_sender_email': {'key': 'notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'customProperties', 'type': '{str}'},
        'certificates': {'key': 'certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'apiVersionConstraint', 'type': 'ApiVersionConstraint'},
    }

    def __init__(self, *, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, **kwargs) -> None:
        super(ApiManagementServiceBaseProperties, self).__init__(**kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint


class ApiManagementServiceCheckNameAvailabilityParameters(Model):
    """Parameters supplied to the CheckNameAvailability operation.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. The name to check for availability.
    :type name: str
    """

    _validation = {
        'name': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name: str, **kwargs) -> None:
        super(ApiManagementServiceCheckNameAvailabilityParameters, self).__init__(**kwargs)
        self.name = name


class ApiManagementServiceGetSsoTokenResult(Model):
    """The response of the GetSsoToken operation.

    :param redirect_uri: Redirect URL to the Publisher Portal containing the
     SSO token.
    :type redirect_uri: str
    """

    _attribute_map = {
        'redirect_uri': {'key': 'redirectUri', 'type': 'str'},
    }

    def __init__(self, *, redirect_uri: str=None, **kwargs) -> None:
        super(ApiManagementServiceGetSsoTokenResult, self).__init__(**kwargs)
        self.redirect_uri = redirect_uri


class ApiManagementServiceIdentity(Model):
    """Identity properties of the Api Management service resource.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param type: Required. The type of identity used for the resource. The
     type 'SystemAssigned, UserAssigned' includes both an implicitly created
     identity and a set of user assigned identities. The type 'None' will
     remove any identities from the service. Possible values include:
     'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None'
    :type type: str or ~azure.mgmt.apimanagement.models.ApimIdentityType
    :ivar principal_id: The principal id of the identity.
    :vartype principal_id: str
    :ivar tenant_id: The client tenant id of the identity.
    :vartype tenant_id: str
    :param user_assigned_identities: The list of user identities associated
     with the resource. The user identity
     dictionary key references will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/
     providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
    :type user_assigned_identities: dict[str,
     ~azure.mgmt.apimanagement.models.UserIdentityProperties]
    """

    _validation = {
        'type': {'required': True},
        'principal_id': {'readonly': True},
        'tenant_id': {'readonly': True},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'principal_id': {'key': 'principalId', 'type': 'str'},
        'tenant_id': {'key': 'tenantId', 'type': 'str'},
        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'},
    }

    def __init__(self, *, type, user_assigned_identities=None, **kwargs) -> None:
        super(ApiManagementServiceIdentity, self).__init__(**kwargs)
        self.type = type
        self.principal_id = None
        self.tenant_id = None
        self.user_assigned_identities = user_assigned_identities


class ApiManagementServiceNameAvailabilityResult(Model):
    """Response of the CheckNameAvailability operation.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar name_available: True if the name is available and can be used to
     create a new API Management service; otherwise false.
    :vartype name_available: bool
    :ivar message: If reason == invalid, provide the user with the reason why
     the given name is invalid, and provide the resource naming requirements so
     that the user can select a valid name. If reason == AlreadyExists, explain
     that <resourceName> is already in use, and direct them to select a
     different name.
    :vartype message: str
    :param reason: Invalid indicates the name provided does not match the
     resource provider’s naming requirements (incorrect length, unsupported
     characters, etc.)  AlreadyExists indicates that the name is already in use
     and is therefore unavailable. Possible values include: 'Valid', 'Invalid',
     'AlreadyExists'
    :type reason: str or
     ~azure.mgmt.apimanagement.models.NameAvailabilityReason
    """

    _validation = {
        'name_available': {'readonly': True},
        'message': {'readonly': True},
    }

    _attribute_map = {
        'name_available': {'key': 'nameAvailable', 'type': 'bool'},
        'message': {'key': 'message', 'type': 'str'},
        'reason': {'key': 'reason', 'type': 'NameAvailabilityReason'},
    }

    def __init__(self, *, reason=None, **kwargs) -> None:
        super(ApiManagementServiceNameAvailabilityResult, self).__init__(**kwargs)
        self.name_available = None
        self.message = None
        self.reason = reason


class ApimResource(Model):
    """The Resource definition.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
    }

    def __init__(self, *, tags=None, **kwargs) -> None:
        super(ApimResource, self).__init__(**kwargs)
        self.id = None
        self.name = None
        self.type = None
        self.tags = tags


class ApiManagementServiceResource(ApimResource):
    """A single API Management service resource in List or Get response.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    :param publisher_email: Required. Publisher email.
    :type publisher_email: str
    :param publisher_name: Required. Publisher name.
    :type publisher_name: str
    :param sku: Required. SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :param identity: Managed service identity of the Api Management service.
    :type identity:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity
    :param location: Required. Resource location.
    :type location: str
    :ivar etag: ETag of the resource.
    :vartype etag: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'publisher_email': {'required': True, 'max_length': 100},
        'publisher_name': {'required': True, 'max_length': 100},
        'sku': {'required': True},
        'location': {'required': True},
        'etag': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
        'notification_sender_email': {'key': 'properties.notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'properties.targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'properties.createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'properties.gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'properties.gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'properties.portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'properties.managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'properties.scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'properties.developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'properties.hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'properties.privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'properties.virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'properties.additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'properties.customProperties', 'type': '{str}'},
        'certificates': {'key': 'properties.certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'properties.enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'properties.disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'properties.virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'properties.apiVersionConstraint', 'type': 'ApiVersionConstraint'},
        'publisher_email': {'key': 'properties.publisherEmail', 'type': 'str'},
        'publisher_name': {'key': 'properties.publisherName', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'identity': {'key': 'identity', 'type': 'ApiManagementServiceIdentity'},
        'location': {'key': 'location', 'type': 'str'},
        'etag': {'key': 'etag', 'type': 'str'},
    }

    def __init__(self, *, publisher_email: str, publisher_name: str, sku, location: str, tags=None, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, identity=None, **kwargs) -> None:
        super(ApiManagementServiceResource, self).__init__(tags=tags, **kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint
        self.publisher_email = publisher_email
        self.publisher_name = publisher_name
        self.sku = sku
        self.identity = identity
        self.location = location
        self.etag = None


class ApiManagementServiceSkuProperties(Model):
    """API Management service resource SKU properties.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. Name of the Sku. Possible values include:
     'Developer', 'Standard', 'Premium', 'Basic', 'Consumption'
    :type name: str or ~azure.mgmt.apimanagement.models.SkuType
    :param capacity: Required. Capacity of the SKU (number of deployed units
     of the SKU). For Consumption SKU capacity must be specified as 0.
    :type capacity: int
    """

    _validation = {
        'name': {'required': True},
        'capacity': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'capacity': {'key': 'capacity', 'type': 'int'},
    }

    def __init__(self, *, name, capacity: int, **kwargs) -> None:
        super(ApiManagementServiceSkuProperties, self).__init__(**kwargs)
        self.name = name
        self.capacity = capacity


class ApiManagementServiceUpdateParameters(ApimResource):
    """Parameter supplied to Update Api Management Service.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource is set to
     Microsoft.ApiManagement.
    :vartype type: str
    :param tags: Resource tags.
    :type tags: dict[str, str]
    :param notification_sender_email: Email address from which the
     notification will be sent.
    :type notification_sender_email: str
    :ivar provisioning_state: The current provisioning state of the API
     Management service which can be one of the following:
     Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.
    :vartype provisioning_state: str
    :ivar target_provisioning_state: The provisioning state of the API
     Management service, which is targeted by the long running operation
     started on the service.
    :vartype target_provisioning_state: str
    :ivar created_at_utc: Creation UTC date of the API Management service.The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :vartype created_at_utc: datetime
    :ivar gateway_url: Gateway URL of the API Management service.
    :vartype gateway_url: str
    :ivar gateway_regional_url: Gateway URL of the API Management service in
     the Default Region.
    :vartype gateway_regional_url: str
    :ivar portal_url: Publisher portal endpoint Url of the API Management
     service.
    :vartype portal_url: str
    :ivar management_api_url: Management API endpoint URL of the API
     Management service.
    :vartype management_api_url: str
    :ivar scm_url: SCM endpoint URL of the API Management service.
    :vartype scm_url: str
    :ivar developer_portal_url: DEveloper Portal endpoint URL of the API
     Management service.
    :vartype developer_portal_url: str
    :param hostname_configurations: Custom hostname configuration of the API
     Management service.
    :type hostname_configurations:
     list[~azure.mgmt.apimanagement.models.HostnameConfiguration]
    :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the
     API Management service in Primary region. Available only for Basic,
     Standard and Premium SKU.
    :vartype public_ip_addresses: list[str]
    :ivar private_ip_addresses: Private Static Load Balanced IP addresses of
     the API Management service in Primary region which is deployed in an
     Internal Virtual Network. Available only for Basic, Standard and Premium
     SKU.
    :vartype private_ip_addresses: list[str]
    :param virtual_network_configuration: Virtual network configuration of the
     API Management service.
    :type virtual_network_configuration:
     ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration
    :param additional_locations: Additional datacenter locations of the API
     Management service.
    :type additional_locations:
     list[~azure.mgmt.apimanagement.models.AdditionalLocation]
    :param custom_properties: Custom properties of the API Management
     service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`
     will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1
     and 1.2).</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`
     can be used to disable just TLS 1.1.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`
     can be used to disable TLS 1.0 on an API Management service.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`
     can be used to disable just TLS 1.1 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`
     can be used to disable TLS 1.0 for communications with
     backends.</br>Setting
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can
     be used to enable HTTP2 protocol on an API Management service.</br>Not
     specifying any of these properties on PATCH operation will reset omitted
     properties' values to their defaults. For all the settings except Http2
     the default value is `True` if the service was created on or before April
     1st 2018 and `False` otherwise. Http2 setting's default value is
     `False`.</br></br>You can disable any of next ciphers by using settings
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,
     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,
     `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.
     The default value is `true` for them.  Note: next ciphers can't be
     disabled since they are required by Azure CloudService internal
     components:
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384
    :type custom_properties: dict[str, str]
    :param certificates: List of Certificates that need to be installed in the
     API Management service. Max supported certificates that can be installed
     is 10.
    :type certificates:
     list[~azure.mgmt.apimanagement.models.CertificateConfiguration]
    :param enable_client_certificate: Property only meant to be used for
     Consumption SKU Service. This enforces a client certificate to be
     presented on each request to the gateway. This also enables the ability to
     authenticate the certificate in the policy on the gateway. Default value:
     False .
    :type enable_client_certificate: bool
    :param disable_gateway: Property only valid for an Api Management service
     deployed in multiple locations. This can be used to disable the gateway in
     master region. Default value: False .
    :type disable_gateway: bool
    :param virtual_network_type: The type of VPN in which API Management
     service needs to be configured in. None (Default Value) means the API
     Management service is not part of any Virtual Network, External means the
     API Management deployment is set up inside a Virtual Network having an
     Internet Facing Endpoint, and Internal means that API Management
     deployment is setup inside a Virtual Network having an Intranet Facing
     Endpoint only. Possible values include: 'None', 'External', 'Internal'.
     Default value: "None" .
    :type virtual_network_type: str or
     ~azure.mgmt.apimanagement.models.VirtualNetworkType
    :param api_version_constraint: Control Plane Apis version constraint for
     the API Management service.
    :type api_version_constraint:
     ~azure.mgmt.apimanagement.models.ApiVersionConstraint
    :param publisher_email: Publisher email.
    :type publisher_email: str
    :param publisher_name: Publisher name.
    :type publisher_name: str
    :param sku: SKU properties of the API Management service.
    :type sku:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties
    :param identity: Managed service identity of the Api Management service.
    :type identity:
     ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity
    :ivar etag: ETag of the resource.
    :vartype etag: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'notification_sender_email': {'max_length': 100},
        'provisioning_state': {'readonly': True},
        'target_provisioning_state': {'readonly': True},
        'created_at_utc': {'readonly': True},
        'gateway_url': {'readonly': True},
        'gateway_regional_url': {'readonly': True},
        'portal_url': {'readonly': True},
        'management_api_url': {'readonly': True},
        'scm_url': {'readonly': True},
        'developer_portal_url': {'readonly': True},
        'public_ip_addresses': {'readonly': True},
        'private_ip_addresses': {'readonly': True},
        'publisher_email': {'max_length': 100},
        'publisher_name': {'max_length': 100},
        'etag': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'tags', 'type': '{str}'},
        'notification_sender_email': {'key': 'properties.notificationSenderEmail', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
        'target_provisioning_state': {'key': 'properties.targetProvisioningState', 'type': 'str'},
        'created_at_utc': {'key': 'properties.createdAtUtc', 'type': 'iso-8601'},
        'gateway_url': {'key': 'properties.gatewayUrl', 'type': 'str'},
        'gateway_regional_url': {'key': 'properties.gatewayRegionalUrl', 'type': 'str'},
        'portal_url': {'key': 'properties.portalUrl', 'type': 'str'},
        'management_api_url': {'key': 'properties.managementApiUrl', 'type': 'str'},
        'scm_url': {'key': 'properties.scmUrl', 'type': 'str'},
        'developer_portal_url': {'key': 'properties.developerPortalUrl', 'type': 'str'},
        'hostname_configurations': {'key': 'properties.hostnameConfigurations', 'type': '[HostnameConfiguration]'},
        'public_ip_addresses': {'key': 'properties.publicIPAddresses', 'type': '[str]'},
        'private_ip_addresses': {'key': 'properties.privateIPAddresses', 'type': '[str]'},
        'virtual_network_configuration': {'key': 'properties.virtualNetworkConfiguration', 'type': 'VirtualNetworkConfiguration'},
        'additional_locations': {'key': 'properties.additionalLocations', 'type': '[AdditionalLocation]'},
        'custom_properties': {'key': 'properties.customProperties', 'type': '{str}'},
        'certificates': {'key': 'properties.certificates', 'type': '[CertificateConfiguration]'},
        'enable_client_certificate': {'key': 'properties.enableClientCertificate', 'type': 'bool'},
        'disable_gateway': {'key': 'properties.disableGateway', 'type': 'bool'},
        'virtual_network_type': {'key': 'properties.virtualNetworkType', 'type': 'str'},
        'api_version_constraint': {'key': 'properties.apiVersionConstraint', 'type': 'ApiVersionConstraint'},
        'publisher_email': {'key': 'properties.publisherEmail', 'type': 'str'},
        'publisher_name': {'key': 'properties.publisherName', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ApiManagementServiceSkuProperties'},
        'identity': {'key': 'identity', 'type': 'ApiManagementServiceIdentity'},
        'etag': {'key': 'etag', 'type': 'str'},
    }

    def __init__(self, *, tags=None, notification_sender_email: str=None, hostname_configurations=None, virtual_network_configuration=None, additional_locations=None, custom_properties=None, certificates=None, enable_client_certificate: bool=False, disable_gateway: bool=False, virtual_network_type="None", api_version_constraint=None, publisher_email: str=None, publisher_name: str=None, sku=None, identity=None, **kwargs) -> None:
        super(ApiManagementServiceUpdateParameters, self).__init__(tags=tags, **kwargs)
        self.notification_sender_email = notification_sender_email
        self.provisioning_state = None
        self.target_provisioning_state = None
        self.created_at_utc = None
        self.gateway_url = None
        self.gateway_regional_url = None
        self.portal_url = None
        self.management_api_url = None
        self.scm_url = None
        self.developer_portal_url = None
        self.hostname_configurations = hostname_configurations
        self.public_ip_addresses = None
        self.private_ip_addresses = None
        self.virtual_network_configuration = virtual_network_configuration
        self.additional_locations = additional_locations
        self.custom_properties = custom_properties
        self.certificates = certificates
        self.enable_client_certificate = enable_client_certificate
        self.disable_gateway = disable_gateway
        self.virtual_network_type = virtual_network_type
        self.api_version_constraint = api_version_constraint
        self.publisher_email = publisher_email
        self.publisher_name = publisher_name
        self.sku = sku
        self.identity = identity
        self.etag = None


class ApiReleaseContract(Resource):
    """ApiRelease details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param api_id: Identifier of the API the release belongs to.
    :type api_id: str
    :ivar created_date_time: The time the API was released. The date conforms
     to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the ISO 8601
     standard.
    :vartype created_date_time: datetime
    :ivar updated_date_time: The time the API release was updated.
    :vartype updated_date_time: datetime
    :param notes: Release Notes
    :type notes: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'created_date_time': {'readonly': True},
        'updated_date_time': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'created_date_time': {'key': 'properties.createdDateTime', 'type': 'iso-8601'},
        'updated_date_time': {'key': 'properties.updatedDateTime', 'type': 'iso-8601'},
        'notes': {'key': 'properties.notes', 'type': 'str'},
    }

    def __init__(self, *, api_id: str=None, notes: str=None, **kwargs) -> None:
        super(ApiReleaseContract, self).__init__(**kwargs)
        self.api_id = api_id
        self.created_date_time = None
        self.updated_date_time = None
        self.notes = notes


class ApiRevisionContract(Model):
    """Summary of revision metadata.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar api_id: Identifier of the API Revision.
    :vartype api_id: str
    :ivar api_revision: Revision number of API.
    :vartype api_revision: str
    :ivar created_date_time: The time the API Revision was created. The date
     conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the
     ISO 8601 standard.
    :vartype created_date_time: datetime
    :ivar updated_date_time: The time the API Revision were updated. The date
     conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the
     ISO 8601 standard.
    :vartype updated_date_time: datetime
    :ivar description: Description of the API Revision.
    :vartype description: str
    :ivar private_url: Gateway URL for accessing the non-current API Revision.
    :vartype private_url: str
    :ivar is_online: Indicates if API revision is the current api revision.
    :vartype is_online: bool
    :ivar is_current: Indicates if API revision is accessible via the gateway.
    :vartype is_current: bool
    """

    _validation = {
        'api_id': {'readonly': True},
        'api_revision': {'readonly': True, 'max_length': 100, 'min_length': 1},
        'created_date_time': {'readonly': True},
        'updated_date_time': {'readonly': True},
        'description': {'readonly': True, 'max_length': 256},
        'private_url': {'readonly': True},
        'is_online': {'readonly': True},
        'is_current': {'readonly': True},
    }

    _attribute_map = {
        'api_id': {'key': 'apiId', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'created_date_time': {'key': 'createdDateTime', 'type': 'iso-8601'},
        'updated_date_time': {'key': 'updatedDateTime', 'type': 'iso-8601'},
        'description': {'key': 'description', 'type': 'str'},
        'private_url': {'key': 'privateUrl', 'type': 'str'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
    }

    def __init__(self, **kwargs) -> None:
        super(ApiRevisionContract, self).__init__(**kwargs)
        self.api_id = None
        self.api_revision = None
        self.created_date_time = None
        self.updated_date_time = None
        self.description = None
        self.private_url = None
        self.is_online = None
        self.is_current = None


class ApiRevisionInfoContract(Model):
    """Object used to create an API Revision or Version based on an existing API
    Revision.

    :param source_api_id: Resource identifier of API to be used to create the
     revision from.
    :type source_api_id: str
    :param api_version_name: Version identifier for the new API Version.
    :type api_version_name: str
    :param api_revision_description: Description of new API Revision.
    :type api_revision_description: str
    :param api_version_set: Version set details
    :type api_version_set:
     ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails
    """

    _validation = {
        'api_version_name': {'max_length': 100},
        'api_revision_description': {'max_length': 256},
    }

    _attribute_map = {
        'source_api_id': {'key': 'sourceApiId', 'type': 'str'},
        'api_version_name': {'key': 'apiVersionName', 'type': 'str'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_set': {'key': 'apiVersionSet', 'type': 'ApiVersionSetContractDetails'},
    }

    def __init__(self, *, source_api_id: str=None, api_version_name: str=None, api_revision_description: str=None, api_version_set=None, **kwargs) -> None:
        super(ApiRevisionInfoContract, self).__init__(**kwargs)
        self.source_api_id = source_api_id
        self.api_version_name = api_version_name
        self.api_revision_description = api_revision_description
        self.api_version_set = api_version_set


class ApiTagResourceContractProperties(ApiEntityBaseContract):
    """API contract properties for the Tag Resources.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param id: API identifier in the form /apis/{apiId}.
    :type id: str
    :param name: API name.
    :type name: str
    :param service_url: Absolute URL of the backend service implementing this
     API.
    :type service_url: str
    :param path: Relative URL uniquely identifying this API and all of its
     resource paths within the API Management service instance. It is appended
     to the API endpoint base URL specified during the service instance
     creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 1},
        'path': {'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authentication_settings': {'key': 'authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'type', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'is_current': {'key': 'isCurrent', 'type': 'bool'},
        'is_online': {'key': 'isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'service_url': {'key': 'serviceUrl', 'type': 'str'},
        'path': {'key': 'path', 'type': 'str'},
        'protocols': {'key': 'protocols', 'type': '[Protocol]'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, id: str=None, name: str=None, service_url: str=None, path: str=None, protocols=None, **kwargs) -> None:
        super(ApiTagResourceContractProperties, self).__init__(description=description, authentication_settings=authentication_settings, subscription_key_parameter_names=subscription_key_parameter_names, api_type=api_type, api_revision=api_revision, api_version=api_version, is_current=is_current, api_revision_description=api_revision_description, api_version_description=api_version_description, api_version_set_id=api_version_set_id, subscription_required=subscription_required, **kwargs)
        self.id = id
        self.name = name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols


class ApiUpdateContract(Model):
    """API update contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param description: Description of the API. May include HTML formatting
     tags.
    :type description: str
    :param authentication_settings: Collection of authentication settings
     included into this API.
    :type authentication_settings:
     ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract
    :param subscription_key_parameter_names: Protocols over which API is made
     available.
    :type subscription_key_parameter_names:
     ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract
    :param api_type: Type of API. Possible values include: 'http', 'soap'
    :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType
    :param api_revision: Describes the Revision of the Api. If no value is
     provided, default revision 1 is created
    :type api_revision: str
    :param api_version: Indicates the Version identifier of the API if the API
     is versioned
    :type api_version: str
    :param is_current: Indicates if API revision is current api revision.
    :type is_current: bool
    :ivar is_online: Indicates if API revision is accessible via the gateway.
    :vartype is_online: bool
    :param api_revision_description: Description of the Api Revision.
    :type api_revision_description: str
    :param api_version_description: Description of the Api Version.
    :type api_version_description: str
    :param api_version_set_id: A resource identifier for the related
     ApiVersionSet.
    :type api_version_set_id: str
    :param subscription_required: Specifies whether an API or Product
     subscription is required for accessing the API.
    :type subscription_required: bool
    :param display_name: API name.
    :type display_name: str
    :param service_url: Absolute URL of the backend service implementing this
     API.
    :type service_url: str
    :param path: Relative URL uniquely identifying this API and all of its
     resource paths within the API Management service instance. It is appended
     to the API endpoint base URL specified during the service instance
     creation to form a public URL for this API.
    :type path: str
    :param protocols: Describes on which protocols the operations in this API
     can be invoked.
    :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]
    """

    _validation = {
        'api_revision': {'max_length': 100, 'min_length': 1},
        'api_version': {'max_length': 100},
        'is_online': {'readonly': True},
        'api_revision_description': {'max_length': 256},
        'api_version_description': {'max_length': 256},
        'display_name': {'max_length': 300, 'min_length': 1},
        'service_url': {'max_length': 2000, 'min_length': 1},
        'path': {'max_length': 400, 'min_length': 0},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'authentication_settings': {'key': 'properties.authenticationSettings', 'type': 'AuthenticationSettingsContract'},
        'subscription_key_parameter_names': {'key': 'properties.subscriptionKeyParameterNames', 'type': 'SubscriptionKeyParameterNamesContract'},
        'api_type': {'key': 'properties.type', 'type': 'str'},
        'api_revision': {'key': 'properties.apiRevision', 'type': 'str'},
        'api_version': {'key': 'properties.apiVersion', 'type': 'str'},
        'is_current': {'key': 'properties.isCurrent', 'type': 'bool'},
        'is_online': {'key': 'properties.isOnline', 'type': 'bool'},
        'api_revision_description': {'key': 'properties.apiRevisionDescription', 'type': 'str'},
        'api_version_description': {'key': 'properties.apiVersionDescription', 'type': 'str'},
        'api_version_set_id': {'key': 'properties.apiVersionSetId', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'service_url': {'key': 'properties.serviceUrl', 'type': 'str'},
        'path': {'key': 'properties.path', 'type': 'str'},
        'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'},
    }

    def __init__(self, *, description: str=None, authentication_settings=None, subscription_key_parameter_names=None, api_type=None, api_revision: str=None, api_version: str=None, is_current: bool=None, api_revision_description: str=None, api_version_description: str=None, api_version_set_id: str=None, subscription_required: bool=None, display_name: str=None, service_url: str=None, path: str=None, protocols=None, **kwargs) -> None:
        super(ApiUpdateContract, self).__init__(**kwargs)
        self.description = description
        self.authentication_settings = authentication_settings
        self.subscription_key_parameter_names = subscription_key_parameter_names
        self.api_type = api_type
        self.api_revision = api_revision
        self.api_version = api_version
        self.is_current = is_current
        self.is_online = None
        self.api_revision_description = api_revision_description
        self.api_version_description = api_version_description
        self.api_version_set_id = api_version_set_id
        self.subscription_required = subscription_required
        self.display_name = display_name
        self.service_url = service_url
        self.path = path
        self.protocols = protocols


class ApiVersionConstraint(Model):
    """Control Plane Apis version constraint for the API Management service.

    :param min_api_version: Limit control plane API calls to API Management
     service with version equal to or newer than this value.
    :type min_api_version: str
    """

    _attribute_map = {
        'min_api_version': {'key': 'minApiVersion', 'type': 'str'},
    }

    def __init__(self, *, min_api_version: str=None, **kwargs) -> None:
        super(ApiVersionConstraint, self).__init__(**kwargs)
        self.min_api_version = min_api_version


class ApiVersionSetContract(Resource):
    """Api Version Set Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    :param display_name: Required. Name of API Version Set
    :type display_name: str
    :param versioning_scheme: Required. An value that determines where the API
     Version identifer will be located in a HTTP request. Possible values
     include: 'Segment', 'Query', 'Header'
    :type versioning_scheme: str or
     ~azure.mgmt.apimanagement.models.VersioningScheme
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
        'display_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'versioning_scheme': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'version_query_name': {'key': 'properties.versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'properties.versionHeaderName', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'versioning_scheme': {'key': 'properties.versioningScheme', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, versioning_scheme, description: str=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetContract, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name
        self.display_name = display_name
        self.versioning_scheme = versioning_scheme


class ApiVersionSetContractDetails(Model):
    """An API Version Set contains the common configuration for a set of API
    Versions relating .

    :param id: Identifier for existing API Version Set. Omit this value to
     create a new Version Set.
    :type id: str
    :param name: The display Name of the API Version Set.
    :type name: str
    :param description: Description of API Version Set.
    :type description: str
    :param versioning_scheme: An value that determines where the API Version
     identifer will be located in a HTTP request. Possible values include:
     'Segment', 'Query', 'Header'
    :type versioning_scheme: str or ~azure.mgmt.apimanagement.models.enum
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    """

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'versioning_scheme': {'key': 'versioningScheme', 'type': 'str'},
        'version_query_name': {'key': 'versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'versionHeaderName', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, name: str=None, description: str=None, versioning_scheme=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetContractDetails, self).__init__(**kwargs)
        self.id = id
        self.name = name
        self.description = description
        self.versioning_scheme = versioning_scheme
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name


class ApiVersionSetEntityBase(Model):
    """Api Version set base parameters.

    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    """

    _validation = {
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'version_query_name': {'key': 'versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'versionHeaderName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, version_query_name: str=None, version_header_name: str=None, **kwargs) -> None:
        super(ApiVersionSetEntityBase, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name


class ApiVersionSetUpdateParameters(Model):
    """Parameters to update or create an Api Version Set Contract.

    :param description: Description of API Version Set.
    :type description: str
    :param version_query_name: Name of query parameter that indicates the API
     Version if versioningScheme is set to `query`.
    :type version_query_name: str
    :param version_header_name: Name of HTTP header parameter that indicates
     the API Version if versioningScheme is set to `header`.
    :type version_header_name: str
    :param display_name: Name of API Version Set
    :type display_name: str
    :param versioning_scheme: An value that determines where the API Version
     identifer will be located in a HTTP request. Possible values include:
     'Segment', 'Query', 'Header'
    :type versioning_scheme: str or
     ~azure.mgmt.apimanagement.models.VersioningScheme
    """

    _validation = {
        'version_query_name': {'max_length': 100, 'min_length': 1},
        'version_header_name': {'max_length': 100, 'min_length': 1},
        'display_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'version_query_name': {'key': 'properties.versionQueryName', 'type': 'str'},
        'version_header_name': {'key': 'properties.versionHeaderName', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'versioning_scheme': {'key': 'properties.versioningScheme', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, version_query_name: str=None, version_header_name: str=None, display_name: str=None, versioning_scheme=None, **kwargs) -> None:
        super(ApiVersionSetUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.version_query_name = version_query_name
        self.version_header_name = version_header_name
        self.display_name = display_name
        self.versioning_scheme = versioning_scheme


class AssociationContract(Resource):
    """Association entity details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param provisioning_state: Provisioning state. Possible values include:
     'created'
    :type provisioning_state: str or
     ~azure.mgmt.apimanagement.models.ProvisioningState
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'ProvisioningState'},
    }

    def __init__(self, *, provisioning_state=None, **kwargs) -> None:
        super(AssociationContract, self).__init__(**kwargs)
        self.provisioning_state = provisioning_state


class AuthenticationSettingsContract(Model):
    """API Authentication Settings.

    :param o_auth2: OAuth2 Authentication settings
    :type o_auth2:
     ~azure.mgmt.apimanagement.models.OAuth2AuthenticationSettingsContract
    :param openid: OpenID Connect Authentication Settings
    :type openid:
     ~azure.mgmt.apimanagement.models.OpenIdAuthenticationSettingsContract
    """

    _attribute_map = {
        'o_auth2': {'key': 'oAuth2', 'type': 'OAuth2AuthenticationSettingsContract'},
        'openid': {'key': 'openid', 'type': 'OpenIdAuthenticationSettingsContract'},
    }

    def __init__(self, *, o_auth2=None, openid=None, **kwargs) -> None:
        super(AuthenticationSettingsContract, self).__init__(**kwargs)
        self.o_auth2 = o_auth2
        self.openid = openid


class AuthorizationServerContract(Resource):
    """External OAuth authorization server settings.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    :param display_name: Required. User-friendly authorization server name.
    :type display_name: str
    :param client_registration_endpoint: Required. Optional reference to a
     page where client or app registration for this authorization server is
     performed. Contains absolute URL to entity being referenced.
    :type client_registration_endpoint: str
    :param authorization_endpoint: Required. OAuth authorization endpoint. See
     http://tools.ietf.org/html/rfc6749#section-3.2.
    :type authorization_endpoint: str
    :param grant_types: Required. Form of an authorization grant, which the
     client uses to request the access token.
    :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]
    :param client_id: Required. Client or app id registered with this
     authorization server.
    :type client_id: str
    :param client_secret: Client or app secret registered with this
     authorization server. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 50, 'min_length': 1},
        'client_registration_endpoint': {'required': True},
        'authorization_endpoint': {'required': True},
        'grant_types': {'required': True},
        'client_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authorization_methods': {'key': 'properties.authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'properties.clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'properties.tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'properties.tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'properties.supportState', 'type': 'bool'},
        'default_scope': {'key': 'properties.defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'properties.bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'properties.resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'properties.resourceOwnerPassword', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'client_registration_endpoint': {'key': 'properties.clientRegistrationEndpoint', 'type': 'str'},
        'authorization_endpoint': {'key': 'properties.authorizationEndpoint', 'type': 'str'},
        'grant_types': {'key': 'properties.grantTypes', 'type': '[str]'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, client_registration_endpoint: str, authorization_endpoint: str, grant_types, client_id: str, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=None, client_secret: str=None, **kwargs) -> None:
        super(AuthorizationServerContract, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>
        self.display_name = display_name
        self.client_registration_endpoint = client_registration_endpoint
        self.authorization_endpoint = authorization_endpoint
        self.grant_types = grant_types
        self.client_id = client_id
        self.client_secret = client_secret


class AuthorizationServerContractBaseProperties(Model):
    """External OAuth authorization server Update settings contract.

    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    """

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'authorization_methods': {'key': 'authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'supportState', 'type': 'bool'},
        'default_scope': {'key': 'defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'resourceOwnerPassword', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=None, **kwargs) -> None:
        super(AuthorizationServerContractBaseProperties, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>


class AuthorizationServerUpdateContract(Resource):
    """External OAuth authorization server settings.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the authorization server. Can contain
     HTML formatting tags.
    :type description: str
    :param authorization_methods: HTTP verbs supported by the authorization
     endpoint. GET must be always present. POST is optional.
    :type authorization_methods: list[str or
     ~azure.mgmt.apimanagement.models.AuthorizationMethod]
    :param client_authentication_method: Method of authentication supported by
     the token endpoint of this authorization server. Possible values are Basic
     and/or Body. When Body is specified, client credentials and other
     parameters are passed within the request body in the
     application/x-www-form-urlencoded format.
    :type client_authentication_method: list[str or
     ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]
    :param token_body_parameters: Additional parameters required by the token
     endpoint of this authorization server represented as an array of JSON
     objects with name and value string properties, i.e. {"name" : "name
     value", "value": "a value"}.
    :type token_body_parameters:
     list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]
    :param token_endpoint: OAuth token endpoint. Contains absolute URI to
     entity being referenced.
    :type token_endpoint: str
    :param support_state: If true, authorization server will include state
     parameter from the authorization request to its response. Client may use
     state parameter to raise protocol security.
    :type support_state: bool
    :param default_scope: Access token scope that is going to be requested by
     default. Can be overridden at the API level. Should be provided in the
     form of a string containing space-delimited values.
    :type default_scope: str
    :param bearer_token_sending_methods: Specifies the mechanism by which
     access token is passed to the API.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]
    :param resource_owner_username: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner username.
    :type resource_owner_username: str
    :param resource_owner_password: Can be optionally specified when resource
     owner password grant type is supported by this authorization server.
     Default resource owner password.
    :type resource_owner_password: str
    :param display_name: User-friendly authorization server name.
    :type display_name: str
    :param client_registration_endpoint: Optional reference to a page where
     client or app registration for this authorization server is performed.
     Contains absolute URL to entity being referenced.
    :type client_registration_endpoint: str
    :param authorization_endpoint: OAuth authorization endpoint. See
     http://tools.ietf.org/html/rfc6749#section-3.2.
    :type authorization_endpoint: str
    :param grant_types: Form of an authorization grant, which the client uses
     to request the access token.
    :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]
    :param client_id: Client or app id registered with this authorization
     server.
    :type client_id: str
    :param client_secret: Client or app secret registered with this
     authorization server. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'max_length': 50, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'authorization_methods': {'key': 'properties.authorizationMethods', 'type': '[AuthorizationMethod]'},
        'client_authentication_method': {'key': 'properties.clientAuthenticationMethod', 'type': '[str]'},
        'token_body_parameters': {'key': 'properties.tokenBodyParameters', 'type': '[TokenBodyParameterContract]'},
        'token_endpoint': {'key': 'properties.tokenEndpoint', 'type': 'str'},
        'support_state': {'key': 'properties.supportState', 'type': 'bool'},
        'default_scope': {'key': 'properties.defaultScope', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'properties.bearerTokenSendingMethods', 'type': '[str]'},
        'resource_owner_username': {'key': 'properties.resourceOwnerUsername', 'type': 'str'},
        'resource_owner_password': {'key': 'properties.resourceOwnerPassword', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'client_registration_endpoint': {'key': 'properties.clientRegistrationEndpoint', 'type': 'str'},
        'authorization_endpoint': {'key': 'properties.authorizationEndpoint', 'type': 'str'},
        'grant_types': {'key': 'properties.grantTypes', 'type': '[str]'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, authorization_methods=None, client_authentication_method=None, token_body_parameters=None, token_endpoint: str=None, support_state: bool=None, default_scope: str=None, bearer_token_sending_methods=None, resource_owner_username: str=None, resource_owner_password: str=<PASSWORD>, display_name: str=None, client_registration_endpoint: str=None, authorization_endpoint: str=None, grant_types=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(AuthorizationServerUpdateContract, self).__init__(**kwargs)
        self.description = description
        self.authorization_methods = authorization_methods
        self.client_authentication_method = client_authentication_method
        self.token_body_parameters = token_body_parameters
        self.token_endpoint = token_endpoint
        self.support_state = support_state
        self.default_scope = default_scope
        self.bearer_token_sending_methods = bearer_token_sending_methods
        self.resource_owner_username = resource_owner_username
        self.resource_owner_password = <PASSWORD>
        self.display_name = display_name
        self.client_registration_endpoint = client_registration_endpoint
        self.authorization_endpoint = authorization_endpoint
        self.grant_types = grant_types
        self.client_id = client_id
        self.client_secret = client_secret


class BackendAuthorizationHeaderCredentials(Model):
    """Authorization header information.

    All required parameters must be populated in order to send to Azure.

    :param scheme: Required. Authentication Scheme name.
    :type scheme: str
    :param parameter: Required. Authentication Parameter value.
    :type parameter: str
    """

    _validation = {
        'scheme': {'required': True, 'max_length': 100, 'min_length': 1},
        'parameter': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'scheme': {'key': 'scheme', 'type': 'str'},
        'parameter': {'key': 'parameter', 'type': 'str'},
    }

    def __init__(self, *, scheme: str, parameter: str, **kwargs) -> None:
        super(BackendAuthorizationHeaderCredentials, self).__init__(**kwargs)
        self.scheme = scheme
        self.parameter = parameter


class BackendBaseParameters(Model):
    """Backend entity base Parameter set.

    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    """

    _validation = {
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'title': {'key': 'title', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'resource_id': {'key': 'resourceId', 'type': 'str'},
        'properties': {'key': 'properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'tls', 'type': 'BackendTlsProperties'},
    }

    def __init__(self, *, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, **kwargs) -> None:
        super(BackendBaseParameters, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls


class BackendContract(Resource):
    """Backend details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    :param url: Required. Runtime Url of the Backend.
    :type url: str
    :param protocol: Required. Backend communication protocol. Possible values
     include: 'http', 'soap'
    :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
        'url': {'required': True, 'max_length': 2000, 'min_length': 1},
        'protocol': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
        'properties': {'key': 'properties.properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'properties.credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'properties.proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'properties.tls', 'type': 'BackendTlsProperties'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'protocol': {'key': 'properties.protocol', 'type': 'str'},
    }

    def __init__(self, *, url: str, protocol, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, **kwargs) -> None:
        super(BackendContract, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls
        self.url = url
        self.protocol = protocol


class BackendCredentialsContract(Model):
    """Details of the Credentials used to connect to Backend.

    :param certificate: List of Client Certificate Thumbprint.
    :type certificate: list[str]
    :param query: Query Parameter description.
    :type query: dict[str, list[str]]
    :param header: Header Parameter description.
    :type header: dict[str, list[str]]
    :param authorization: Authorization header authentication
    :type authorization:
     ~azure.mgmt.apimanagement.models.BackendAuthorizationHeaderCredentials
    """

    _validation = {
        'certificate': {'max_items': 32},
    }

    _attribute_map = {
        'certificate': {'key': 'certificate', 'type': '[str]'},
        'query': {'key': 'query', 'type': '{[str]}'},
        'header': {'key': 'header', 'type': '{[str]}'},
        'authorization': {'key': 'authorization', 'type': 'BackendAuthorizationHeaderCredentials'},
    }

    def __init__(self, *, certificate=None, query=None, header=None, authorization=None, **kwargs) -> None:
        super(BackendCredentialsContract, self).__init__(**kwargs)
        self.certificate = certificate
        self.query = query
        self.header = header
        self.authorization = authorization


class BackendProperties(Model):
    """Properties specific to the Backend Type.

    :param service_fabric_cluster: Backend Service Fabric Cluster Properties
    :type service_fabric_cluster:
     ~azure.mgmt.apimanagement.models.BackendServiceFabricClusterProperties
    """

    _attribute_map = {
        'service_fabric_cluster': {'key': 'serviceFabricCluster', 'type': 'BackendServiceFabricClusterProperties'},
    }

    def __init__(self, *, service_fabric_cluster=None, **kwargs) -> None:
        super(BackendProperties, self).__init__(**kwargs)
        self.service_fabric_cluster = service_fabric_cluster


class BackendProxyContract(Model):
    """Details of the Backend WebProxy Server to use in the Request to Backend.

    All required parameters must be populated in order to send to Azure.

    :param url: Required. WebProxy Server AbsoluteUri property which includes
     the entire URI stored in the Uri instance, including all fragments and
     query strings.
    :type url: str
    :param username: Username to connect to the WebProxy server
    :type username: str
    :param password: Password to connect to the WebProxy Server
    :type password: str
    """

    _validation = {
        'url': {'required': True, 'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'url': {'key': 'url', 'type': 'str'},
        'username': {'key': 'username', 'type': 'str'},
        'password': {'key': 'password', 'type': 'str'},
    }

    def __init__(self, *, url: str, username: str=None, password: str=<PASSWORD>, **kwargs) -> None:
        super(BackendProxyContract, self).__init__(**kwargs)
        self.url = url
        self.username = username
        self.password = password


class BackendReconnectContract(Resource):
    """Reconnect request parameters.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param after: Duration in ISO8601 format after which reconnect will be
     initiated. Minimum duration of the Reconnect is PT2M.
    :type after: timedelta
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'after': {'key': 'properties.after', 'type': 'duration'},
    }

    def __init__(self, *, after=None, **kwargs) -> None:
        super(BackendReconnectContract, self).__init__(**kwargs)
        self.after = after


class BackendServiceFabricClusterProperties(Model):
    """Properties of the Service Fabric Type Backend.

    All required parameters must be populated in order to send to Azure.

    :param client_certificatethumbprint: Required. The client certificate
     thumbprint for the management endpoint.
    :type client_certificatethumbprint: str
    :param max_partition_resolution_retries: Maximum number of retries while
     attempting resolve the partition.
    :type max_partition_resolution_retries: int
    :param management_endpoints: Required. The cluster management endpoint.
    :type management_endpoints: list[str]
    :param server_certificate_thumbprints: Thumbprints of certificates cluster
     management service uses for tls communication
    :type server_certificate_thumbprints: list[str]
    :param server_x509_names: Server X509 Certificate Names Collection
    :type server_x509_names:
     list[~azure.mgmt.apimanagement.models.X509CertificateName]
    """

    _validation = {
        'client_certificatethumbprint': {'required': True},
        'management_endpoints': {'required': True},
    }

    _attribute_map = {
        'client_certificatethumbprint': {'key': 'clientCertificatethumbprint', 'type': 'str'},
        'max_partition_resolution_retries': {'key': 'maxPartitionResolutionRetries', 'type': 'int'},
        'management_endpoints': {'key': 'managementEndpoints', 'type': '[str]'},
        'server_certificate_thumbprints': {'key': 'serverCertificateThumbprints', 'type': '[str]'},
        'server_x509_names': {'key': 'serverX509Names', 'type': '[X509CertificateName]'},
    }

    def __init__(self, *, client_certificatethumbprint: str, management_endpoints, max_partition_resolution_retries: int=None, server_certificate_thumbprints=None, server_x509_names=None, **kwargs) -> None:
        super(BackendServiceFabricClusterProperties, self).__init__(**kwargs)
        self.client_certificatethumbprint = client_certificatethumbprint
        self.max_partition_resolution_retries = max_partition_resolution_retries
        self.management_endpoints = management_endpoints
        self.server_certificate_thumbprints = server_certificate_thumbprints
        self.server_x509_names = server_x509_names


class BackendTlsProperties(Model):
    """Properties controlling TLS Certificate Validation.

    :param validate_certificate_chain: Flag indicating whether SSL certificate
     chain validation should be done when using self-signed certificates for
     this backend host. Default value: True .
    :type validate_certificate_chain: bool
    :param validate_certificate_name: Flag indicating whether SSL certificate
     name validation should be done when using self-signed certificates for
     this backend host. Default value: True .
    :type validate_certificate_name: bool
    """

    _attribute_map = {
        'validate_certificate_chain': {'key': 'validateCertificateChain', 'type': 'bool'},
        'validate_certificate_name': {'key': 'validateCertificateName', 'type': 'bool'},
    }

    def __init__(self, *, validate_certificate_chain: bool=True, validate_certificate_name: bool=True, **kwargs) -> None:
        super(BackendTlsProperties, self).__init__(**kwargs)
        self.validate_certificate_chain = validate_certificate_chain
        self.validate_certificate_name = validate_certificate_name


class BackendUpdateParameters(Model):
    """Backend update parameters.

    :param title: Backend Title.
    :type title: str
    :param description: Backend Description.
    :type description: str
    :param resource_id: Management Uri of the Resource in External System.
     This url can be the Arm Resource Id of Logic Apps, Function Apps or Api
     Apps.
    :type resource_id: str
    :param properties: Backend Properties contract
    :type properties: ~azure.mgmt.apimanagement.models.BackendProperties
    :param credentials: Backend Credentials Contract Properties
    :type credentials:
     ~azure.mgmt.apimanagement.models.BackendCredentialsContract
    :param proxy: Backend Proxy Contract Properties
    :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract
    :param tls: Backend TLS Properties
    :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties
    :param url: Runtime Url of the Backend.
    :type url: str
    :param protocol: Backend communication protocol. Possible values include:
     'http', 'soap'
    :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol
    """

    _validation = {
        'title': {'max_length': 300, 'min_length': 1},
        'description': {'max_length': 2000, 'min_length': 1},
        'resource_id': {'max_length': 2000, 'min_length': 1},
        'url': {'max_length': 2000, 'min_length': 1},
    }

    _attribute_map = {
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
        'properties': {'key': 'properties.properties', 'type': 'BackendProperties'},
        'credentials': {'key': 'properties.credentials', 'type': 'BackendCredentialsContract'},
        'proxy': {'key': 'properties.proxy', 'type': 'BackendProxyContract'},
        'tls': {'key': 'properties.tls', 'type': 'BackendTlsProperties'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'protocol': {'key': 'properties.protocol', 'type': 'str'},
    }

    def __init__(self, *, title: str=None, description: str=None, resource_id: str=None, properties=None, credentials=None, proxy=None, tls=None, url: str=None, protocol=None, **kwargs) -> None:
        super(BackendUpdateParameters, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.resource_id = resource_id
        self.properties = properties
        self.credentials = credentials
        self.proxy = proxy
        self.tls = tls
        self.url = url
        self.protocol = protocol


class BodyDiagnosticSettings(Model):
    """Body logging settings.

    :param bytes: Number of request body bytes to log.
    :type bytes: int
    """

    _validation = {
        'bytes': {'maximum': 8192},
    }

    _attribute_map = {
        'bytes': {'key': 'bytes', 'type': 'int'},
    }

    def __init__(self, *, bytes: int=None, **kwargs) -> None:
        super(BodyDiagnosticSettings, self).__init__(**kwargs)
        self.bytes = bytes


class CacheContract(Resource):
    """Cache details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Cache description
    :type description: str
    :param connection_string: Required. Runtime connection string to cache
    :type connection_string: str
    :param resource_id: Original uri of entity in external system cache points
     to
    :type resource_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 2000},
        'connection_string': {'required': True, 'max_length': 300},
        'resource_id': {'max_length': 2000},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, connection_string: str, description: str=None, resource_id: str=None, **kwargs) -> None:
        super(CacheContract, self).__init__(**kwargs)
        self.description = description
        self.connection_string = connection_string
        self.resource_id = resource_id


class CacheUpdateParameters(Model):
    """Cache update details.

    :param description: Cache description
    :type description: str
    :param connection_string: Runtime connection string to cache
    :type connection_string: str
    :param resource_id: Original uri of entity in external system cache points
     to
    :type resource_id: str
    """

    _validation = {
        'description': {'max_length': 2000},
        'connection_string': {'max_length': 300},
        'resource_id': {'max_length': 2000},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, connection_string: str=None, resource_id: str=None, **kwargs) -> None:
        super(CacheUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.connection_string = connection_string
        self.resource_id = resource_id


class CertificateConfiguration(Model):
    """Certificate configuration which consist of non-trusted intermediates and
    root certificates.

    All required parameters must be populated in order to send to Azure.

    :param encoded_certificate: Base64 Encoded certificate.
    :type encoded_certificate: str
    :param certificate_password: <PASSWORD>.
    :type certificate_password: str
    :param store_name: Required. The
     System.Security.Cryptography.x509certificates.StoreName certificate store
     location. Only Root and CertificateAuthority are valid locations. Possible
     values include: 'CertificateAuthority', 'Root'
    :type store_name: str or ~azure.mgmt.apimanagement.models.enum
    :param certificate: Certificate information.
    :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation
    """

    _validation = {
        'store_name': {'required': True},
    }

    _attribute_map = {
        'encoded_certificate': {'key': 'encodedCertificate', 'type': 'str'},
        'certificate_password': {'key': 'certificatePassword', 'type': 'str'},
        'store_name': {'key': 'storeName', 'type': 'str'},
        'certificate': {'key': 'certificate', 'type': 'CertificateInformation'},
    }

    def __init__(self, *, store_name, encoded_certificate: str=None, certificate_password: str=None, certificate=None, **kwargs) -> None:
        super(CertificateConfiguration, self).__init__(**kwargs)
        self.encoded_certificate = encoded_certificate
        self.certificate_password = <PASSWORD>
        self.store_name = store_name
        self.certificate = certificate


class CertificateContract(Resource):
    """Certificate details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param subject: Required. Subject attribute of the certificate.
    :type subject: str
    :param thumbprint: Required. Thumbprint of the certificate.
    :type thumbprint: str
    :param expiration_date: Required. Expiration date of the certificate. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'subject': {'required': True},
        'thumbprint': {'required': True},
        'expiration_date': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'thumbprint': {'key': 'properties.thumbprint', 'type': 'str'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
    }

    def __init__(self, *, subject: str, thumbprint: str, expiration_date, **kwargs) -> None:
        super(CertificateContract, self).__init__(**kwargs)
        self.subject = subject
        self.thumbprint = thumbprint
        self.expiration_date = expiration_date


class CertificateCreateOrUpdateParameters(Model):
    """Certificate create or update details.

    All required parameters must be populated in order to send to Azure.

    :param data: Required. Base 64 encoded certificate using the
     application/x-pkcs12 representation.
    :type data: str
    :param password: Required. Password for the Certificate
    :type password: str
    """

    _validation = {
        'data': {'required': True},
        'password': {'required': True},
    }

    _attribute_map = {
        'data': {'key': 'properties.data', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
    }

    def __init__(self, *, data: str, password: str, **kwargs) -> None:
        super(CertificateCreateOrUpdateParameters, self).__init__(**kwargs)
        self.data = data
        self.password = password


class CertificateInformation(Model):
    """SSL certificate information.

    All required parameters must be populated in order to send to Azure.

    :param expiry: Required. Expiration date of the certificate. The date
     conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by
     the ISO 8601 standard.
    :type expiry: datetime
    :param thumbprint: Required. Thumbprint of the certificate.
    :type thumbprint: str
    :param subject: Required. Subject of the certificate.
    :type subject: str
    """

    _validation = {
        'expiry': {'required': True},
        'thumbprint': {'required': True},
        'subject': {'required': True},
    }

    _attribute_map = {
        'expiry': {'key': 'expiry', 'type': 'iso-8601'},
        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
        'subject': {'key': 'subject', 'type': 'str'},
    }

    def __init__(self, *, expiry, thumbprint: str, subject: str, **kwargs) -> None:
        super(CertificateInformation, self).__init__(**kwargs)
        self.expiry = expiry
        self.thumbprint = thumbprint
        self.subject = subject


class ClientSecretContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param client_secret: Client or app secret used in IdentityProviders, Aad,
     OpenID or OAuth.
    :type client_secret: str
    """

    _attribute_map = {
        'client_secret': {'key': 'clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_secret: str=None, **kwargs) -> None:
        super(ClientSecretContract, self).__init__(**kwargs)
        self.client_secret = client_secret


class CloudError(Model):
    """CloudError.
    """

    _attribute_map = {
    }


class ConnectivityStatusContract(Model):
    """Details about connectivity to a resource.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. The hostname of the resource which the service
     depends on. This can be the database, storage or any other azure resource
     on which the service depends upon.
    :type name: str
    :param status: Required. Resource Connectivity Status Type identifier.
     Possible values include: 'initializing', 'success', 'failure'
    :type status: str or
     ~azure.mgmt.apimanagement.models.ConnectivityStatusType
    :param error: Error details of the connectivity to the resource.
    :type error: str
    :param last_updated: Required. The date when the resource connectivity
     status was last updated. This status should be updated every 15 minutes.
     If this status has not been updated, then it means that the service has
     lost network connectivity to the resource, from inside the Virtual
     Network.The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type last_updated: datetime
    :param last_status_change: Required. The date when the resource
     connectivity status last Changed from success to failure or vice-versa.
     The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type last_status_change: datetime
    """

    _validation = {
        'name': {'required': True, 'min_length': 1},
        'status': {'required': True},
        'last_updated': {'required': True},
        'last_status_change': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'status': {'key': 'status', 'type': 'str'},
        'error': {'key': 'error', 'type': 'str'},
        'last_updated': {'key': 'lastUpdated', 'type': 'iso-8601'},
        'last_status_change': {'key': 'lastStatusChange', 'type': 'iso-8601'},
    }

    def __init__(self, *, name: str, status, last_updated, last_status_change, error: str=None, **kwargs) -> None:
        super(ConnectivityStatusContract, self).__init__(**kwargs)
        self.name = name
        self.status = status
        self.error = error
        self.last_updated = last_updated
        self.last_status_change = last_status_change


class DeployConfigurationParameters(Model):
    """Deploy Tenant Configuration Contract.

    All required parameters must be populated in order to send to Azure.

    :param branch: Required. The name of the Git branch from which the
     configuration is to be deployed to the configuration database.
    :type branch: str
    :param force: The value enforcing deleting subscriptions to products that
     are deleted in this update.
    :type force: bool
    """

    _validation = {
        'branch': {'required': True},
    }

    _attribute_map = {
        'branch': {'key': 'properties.branch', 'type': 'str'},
        'force': {'key': 'properties.force', 'type': 'bool'},
    }

    def __init__(self, *, branch: str, force: bool=None, **kwargs) -> None:
        super(DeployConfigurationParameters, self).__init__(**kwargs)
        self.branch = branch
        self.force = force


class DiagnosticContract(Resource):
    """Diagnostic details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param always_log: Specifies for what type of messages sampling settings
     should not apply. Possible values include: 'allErrors'
    :type always_log: str or ~azure.mgmt.apimanagement.models.AlwaysLog
    :param logger_id: Required. Resource Id of a target logger.
    :type logger_id: str
    :param sampling: Sampling settings for Diagnostic.
    :type sampling: ~azure.mgmt.apimanagement.models.SamplingSettings
    :param frontend: Diagnostic settings for incoming/outgoing HTTP messages
     to the Gateway.
    :type frontend:
     ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings
    :param backend: Diagnostic settings for incoming/outgoing HTTP messages to
     the Backend
    :type backend: ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings
    :param log_client_ip: Log the ClientIP. Default is false.
    :type log_client_ip: bool
    :param http_correlation_protocol: Sets correlation protocol to use for
     Application Insights diagnostics. Possible values include: 'None',
     'Legacy', 'W3C'
    :type http_correlation_protocol: str or
     ~azure.mgmt.apimanagement.models.HttpCorrelationProtocol
    :param verbosity: The verbosity level applied to traces emitted by trace
     policies. Possible values include: 'verbose', 'information', 'error'
    :type verbosity: str or ~azure.mgmt.apimanagement.models.Verbosity
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'logger_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'always_log': {'key': 'properties.alwaysLog', 'type': 'str'},
        'logger_id': {'key': 'properties.loggerId', 'type': 'str'},
        'sampling': {'key': 'properties.sampling', 'type': 'SamplingSettings'},
        'frontend': {'key': 'properties.frontend', 'type': 'PipelineDiagnosticSettings'},
        'backend': {'key': 'properties.backend', 'type': 'PipelineDiagnosticSettings'},
        'log_client_ip': {'key': 'properties.logClientIp', 'type': 'bool'},
        'http_correlation_protocol': {'key': 'properties.httpCorrelationProtocol', 'type': 'str'},
        'verbosity': {'key': 'properties.verbosity', 'type': 'str'},
    }

    def __init__(self, *, logger_id: str, always_log=None, sampling=None, frontend=None, backend=None, log_client_ip: bool=None, http_correlation_protocol=None, verbosity=None, **kwargs) -> None:
        super(DiagnosticContract, self).__init__(**kwargs)
        self.always_log = always_log
        self.logger_id = logger_id
        self.sampling = sampling
        self.frontend = frontend
        self.backend = backend
        self.log_client_ip = log_client_ip
        self.http_correlation_protocol = http_correlation_protocol
        self.verbosity = verbosity


class EmailTemplateContract(Resource):
    """Email Template details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param subject: Required. Subject of the Template.
    :type subject: str
    :param body: Required. Email Template Body. This should be a valid
     XDocument
    :type body: str
    :param title: Title of the Template.
    :type title: str
    :param description: Description of the Email Template.
    :type description: str
    :ivar is_default: Whether the template is the default template provided by
     Api Management or has been edited.
    :vartype is_default: bool
    :param parameters: Email Template Parameter values.
    :type parameters:
     list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'subject': {'required': True, 'max_length': 1000, 'min_length': 1},
        'body': {'required': True, 'min_length': 1},
        'is_default': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'body': {'key': 'properties.body', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'is_default': {'key': 'properties.isDefault', 'type': 'bool'},
        'parameters': {'key': 'properties.parameters', 'type': '[EmailTemplateParametersContractProperties]'},
    }

    def __init__(self, *, subject: str, body: str, title: str=None, description: str=None, parameters=None, **kwargs) -> None:
        super(EmailTemplateContract, self).__init__(**kwargs)
        self.subject = subject
        self.body = body
        self.title = title
        self.description = description
        self.is_default = None
        self.parameters = parameters


class EmailTemplateParametersContractProperties(Model):
    """Email Template Parameter contract.

    :param name: Template parameter name.
    :type name: str
    :param title: Template parameter title.
    :type title: str
    :param description: Template parameter description.
    :type description: str
    """

    _validation = {
        'name': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'title': {'max_length': 4096, 'min_length': 1},
        'description': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'title': {'key': 'title', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
    }

    def __init__(self, *, name: str=None, title: str=None, description: str=None, **kwargs) -> None:
        super(EmailTemplateParametersContractProperties, self).__init__(**kwargs)
        self.name = name
        self.title = title
        self.description = description


class EmailTemplateUpdateParameters(Model):
    """Email Template update Parameters.

    :param subject: Subject of the Template.
    :type subject: str
    :param title: Title of the Template.
    :type title: str
    :param description: Description of the Email Template.
    :type description: str
    :param body: Email Template Body. This should be a valid XDocument
    :type body: str
    :param parameters: Email Template Parameter values.
    :type parameters:
     list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties]
    """

    _validation = {
        'subject': {'max_length': 1000, 'min_length': 1},
        'body': {'min_length': 1},
    }

    _attribute_map = {
        'subject': {'key': 'properties.subject', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'body': {'key': 'properties.body', 'type': 'str'},
        'parameters': {'key': 'properties.parameters', 'type': '[EmailTemplateParametersContractProperties]'},
    }

    def __init__(self, *, subject: str=None, title: str=None, description: str=None, body: str=None, parameters=None, **kwargs) -> None:
        super(EmailTemplateUpdateParameters, self).__init__(**kwargs)
        self.subject = subject
        self.title = title
        self.description = description
        self.body = body
        self.parameters = parameters


class ErrorFieldContract(Model):
    """Error Field contract.

    :param code: Property level error code.
    :type code: str
    :param message: Human-readable representation of property-level error.
    :type message: str
    :param target: Property name.
    :type target: str
    """

    _attribute_map = {
        'code': {'key': 'code', 'type': 'str'},
        'message': {'key': 'message', 'type': 'str'},
        'target': {'key': 'target', 'type': 'str'},
    }

    def __init__(self, *, code: str=None, message: str=None, target: str=None, **kwargs) -> None:
        super(ErrorFieldContract, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.target = target


class ErrorResponse(Model):
    """Error Response.

    :param code: Service-defined error code. This code serves as a sub-status
     for the HTTP error code specified in the response.
    :type code: str
    :param message: Human-readable representation of the error.
    :type message: str
    :param details: The list of invalid fields send in request, in case of
     validation error.
    :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract]
    """

    _attribute_map = {
        'code': {'key': 'error.code', 'type': 'str'},
        'message': {'key': 'error.message', 'type': 'str'},
        'details': {'key': 'error.details', 'type': '[ErrorFieldContract]'},
    }

    def __init__(self, *, code: str=None, message: str=None, details=None, **kwargs) -> None:
        super(ErrorResponse, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.details = details


class ErrorResponseException(HttpOperationError):
    """Server responsed with exception of type: 'ErrorResponse'.

    :param deserialize: A deserializer
    :param response: Server response to be deserialized.
    """

    def __init__(self, deserialize, response, *args):

        super(ErrorResponseException, self).__init__(deserialize, response, 'ErrorResponse', *args)


class ErrorResponseBody(Model):
    """Error Body contract.

    :param code: Service-defined error code. This code serves as a sub-status
     for the HTTP error code specified in the response.
    :type code: str
    :param message: Human-readable representation of the error.
    :type message: str
    :param details: The list of invalid fields send in request, in case of
     validation error.
    :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract]
    """

    _attribute_map = {
        'code': {'key': 'code', 'type': 'str'},
        'message': {'key': 'message', 'type': 'str'},
        'details': {'key': 'details', 'type': '[ErrorFieldContract]'},
    }

    def __init__(self, *, code: str=None, message: str=None, details=None, **kwargs) -> None:
        super(ErrorResponseBody, self).__init__(**kwargs)
        self.code = code
        self.message = message
        self.details = details


class GatewayContract(Resource):
    """Gateway details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param location_data: Gateway location.
    :type location_data:
     ~azure.mgmt.apimanagement.models.ResourceLocationDataContract
    :param description: Gateway description
    :type description: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'location_data': {'key': 'properties.locationData', 'type': 'ResourceLocationDataContract'},
        'description': {'key': 'properties.description', 'type': 'str'},
    }

    def __init__(self, *, location_data=None, description: str=None, **kwargs) -> None:
        super(GatewayContract, self).__init__(**kwargs)
        self.location_data = location_data
        self.description = description


class GatewayHostnameConfigurationContract(Resource):
    """Gateway hostname configuration details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param hostname: Hostname value. Supports valid domain name, partial or
     full wildcard
    :type hostname: str
    :param certificate_id: Identifier of Certificate entity that will be used
     for TLS connection establishment
    :type certificate_id: str
    :param negotiate_client_certificate: Determines whether gateway requests
     client certificate
    :type negotiate_client_certificate: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'hostname': {'key': 'properties.hostname', 'type': 'str'},
        'certificate_id': {'key': 'properties.certificateId', 'type': 'str'},
        'negotiate_client_certificate': {'key': 'properties.negotiateClientCertificate', 'type': 'bool'},
    }

    def __init__(self, *, hostname: str=None, certificate_id: str=None, negotiate_client_certificate: bool=None, **kwargs) -> None:
        super(GatewayHostnameConfigurationContract, self).__init__(**kwargs)
        self.hostname = hostname
        self.certificate_id = certificate_id
        self.negotiate_client_certificate = negotiate_client_certificate


class GatewayKeyRegenerationRequestContract(Model):
    """Gateway key regeneration request contract properties.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key being regenerated. Possible values
     include: 'primary', 'secondary'
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    """

    _validation = {
        'key_type': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'keyType', 'type': 'KeyType'},
    }

    def __init__(self, *, key_type, **kwargs) -> None:
        super(GatewayKeyRegenerationRequestContract, self).__init__(**kwargs)
        self.key_type = key_type


class GatewayKeysContract(Model):
    """Gateway authentication keys.

    :param primary: Primary gateway key.
    :type primary: str
    :param secondary: Secondary gateway key.
    :type secondary: str
    """

    _attribute_map = {
        'primary': {'key': 'primary', 'type': 'str'},
        'secondary': {'key': 'secondary', 'type': 'str'},
    }

    def __init__(self, *, primary: str=None, secondary: str=None, **kwargs) -> None:
        super(GatewayKeysContract, self).__init__(**kwargs)
        self.primary = primary
        self.secondary = secondary


class GatewayTokenContract(Model):
    """Gateway access token.

    :param value: Shared Access Authentication token value for the Gateway.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(GatewayTokenContract, self).__init__(**kwargs)
        self.value = value


class GatewayTokenRequestContract(Model):
    """Gateway token request contract properties.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key to be used to generate gateway token.
     Possible values include: 'primary', 'secondary'. Default value: "primary"
     .
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    :param expiry: Required. The Expiry time of the Token. Maximum token
     expiry time is set to 30 days. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type expiry: datetime
    """

    _validation = {
        'key_type': {'required': True},
        'expiry': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'keyType', 'type': 'KeyType'},
        'expiry': {'key': 'expiry', 'type': 'iso-8601'},
    }

    def __init__(self, *, expiry, key_type="primary", **kwargs) -> None:
        super(GatewayTokenRequestContract, self).__init__(**kwargs)
        self.key_type = key_type
        self.expiry = expiry


class GenerateSsoUrlResult(Model):
    """Generate SSO Url operations response details.

    :param value: Redirect Url containing the SSO URL value.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(GenerateSsoUrlResult, self).__init__(**kwargs)
        self.value = value


class GroupContract(Resource):
    """Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description. Can contain HTML formatting tags.
    :type description: str
    :ivar built_in: true if the group is one of the three system groups
     (Administrators, Developers, or Guests); otherwise false.
    :vartype built_in: bool
    :param group_contract_type: Group type. Possible values include: 'custom',
     'system', 'external'
    :type group_contract_type: str or
     ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: For external groups, this property contains the id of
     the group from the external identity provider, e.g. for Azure Active
     Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;
     otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'description': {'max_length': 1000},
        'built_in': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'built_in': {'key': 'properties.builtIn', 'type': 'bool'},
        'group_contract_type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, group_contract_type=None, external_id: str=None, **kwargs) -> None:
        super(GroupContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.built_in = None
        self.group_contract_type = group_contract_type
        self.external_id = external_id


class GroupContractProperties(Model):
    """Group contract Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description. Can contain HTML formatting tags.
    :type description: str
    :ivar built_in: true if the group is one of the three system groups
     (Administrators, Developers, or Guests); otherwise false.
    :vartype built_in: bool
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: For external groups, this property contains the id of
     the group from the external identity provider, e.g. for Azure Active
     Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;
     otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'description': {'max_length': 1000},
        'built_in': {'readonly': True},
    }

    _attribute_map = {
        'display_name': {'key': 'displayName', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'built_in': {'key': 'builtIn', 'type': 'bool'},
        'type': {'key': 'type', 'type': 'GroupType'},
        'external_id': {'key': 'externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupContractProperties, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.built_in = None
        self.type = type
        self.external_id = external_id


class GroupCreateParameters(Model):
    """Parameters supplied to the Create Group operation.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Group name.
    :type display_name: str
    :param description: Group description.
    :type description: str
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: Identifier of the external groups, this property
     contains the id of the group from the external identity provider, e.g. for
     Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group
     object id>`; otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupCreateParameters, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.type = type
        self.external_id = external_id


class GroupUpdateParameters(Model):
    """Parameters supplied to the Update Group operation.

    :param display_name: Group name.
    :type display_name: str
    :param description: Group description.
    :type description: str
    :param type: Group type. Possible values include: 'custom', 'system',
     'external'
    :type type: str or ~azure.mgmt.apimanagement.models.GroupType
    :param external_id: Identifier of the external groups, this property
     contains the id of the group from the external identity provider, e.g. for
     Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group
     object id>`; otherwise the value is null.
    :type external_id: str
    """

    _validation = {
        'display_name': {'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'type': {'key': 'properties.type', 'type': 'GroupType'},
        'external_id': {'key': 'properties.externalId', 'type': 'str'},
    }

    def __init__(self, *, display_name: str=None, description: str=None, type=None, external_id: str=None, **kwargs) -> None:
        super(GroupUpdateParameters, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.type = type
        self.external_id = external_id


class HostnameConfiguration(Model):
    """Custom hostname configuration.

    All required parameters must be populated in order to send to Azure.

    :param type: Required. Hostname type. Possible values include: 'Proxy',
     'Portal', 'Management', 'Scm', 'DeveloperPortal'
    :type type: str or ~azure.mgmt.apimanagement.models.HostnameType
    :param host_name: Required. Hostname to configure on the Api Management
     service.
    :type host_name: str
    :param key_vault_id: Url to the KeyVault Secret containing the Ssl
     Certificate. If absolute Url containing version is provided, auto-update
     of ssl certificate will not work. This requires Api Management service to
     be configured with MSI. The secret should be of type
     *application/x-pkcs12*
    :type key_vault_id: str
    :param encoded_certificate: Base64 Encoded certificate.
    :type encoded_certificate: str
    :param certificate_password: <PASSWORD>.
    :type certificate_password: str
    :param default_ssl_binding: Specify true to setup the certificate
     associated with this Hostname as the Default SSL Certificate. If a client
     does not send the SNI header, then this will be the certificate that will
     be challenged. The property is useful if a service has multiple custom
     hostname enabled and it needs to decide on the default ssl certificate.
     The setting only applied to Proxy Hostname Type. Default value: False .
    :type default_ssl_binding: bool
    :param negotiate_client_certificate: Specify true to always negotiate
     client certificate on the hostname. Default Value is false. Default value:
     False .
    :type negotiate_client_certificate: bool
    :param certificate: Certificate information.
    :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation
    """

    _validation = {
        'type': {'required': True},
        'host_name': {'required': True},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'host_name': {'key': 'hostName', 'type': 'str'},
        'key_vault_id': {'key': 'keyVaultId', 'type': 'str'},
        'encoded_certificate': {'key': 'encodedCertificate', 'type': 'str'},
        'certificate_password': {'key': 'certificatePassword', 'type': 'str'},
        'default_ssl_binding': {'key': 'defaultSslBinding', 'type': 'bool'},
        'negotiate_client_certificate': {'key': 'negotiateClientCertificate', 'type': 'bool'},
        'certificate': {'key': 'certificate', 'type': 'CertificateInformation'},
    }

    def __init__(self, *, type, host_name: str, key_vault_id: str=None, encoded_certificate: str=None, certificate_password: str=None, default_ssl_binding: bool=False, negotiate_client_certificate: bool=False, certificate=None, **kwargs) -> None:
        super(HostnameConfiguration, self).__init__(**kwargs)
        self.type = type
        self.host_name = host_name
        self.key_vault_id = key_vault_id
        self.encoded_certificate = encoded_certificate
        self.certificate_password = <PASSWORD>
        self.default_ssl_binding = default_ssl_binding
        self.negotiate_client_certificate = negotiate_client_certificate
        self.certificate = certificate


class HttpMessageDiagnostic(Model):
    """Http message diagnostic settings.

    :param headers: Array of HTTP Headers to log.
    :type headers: list[str]
    :param body: Body logging settings.
    :type body: ~azure.mgmt.apimanagement.models.BodyDiagnosticSettings
    """

    _attribute_map = {
        'headers': {'key': 'headers', 'type': '[str]'},
        'body': {'key': 'body', 'type': 'BodyDiagnosticSettings'},
    }

    def __init__(self, *, headers=None, body=None, **kwargs) -> None:
        super(HttpMessageDiagnostic, self).__init__(**kwargs)
        self.headers = headers
        self.body = body


class IdentityProviderBaseParameters(Model):
    """Identity Provider Base Parameter Properties.

    :param type: Identity Provider Type identifier. Possible values include:
     'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'
    :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    """

    _validation = {
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
    }

    _attribute_map = {
        'type': {'key': 'type', 'type': 'str'},
        'signin_tenant': {'key': 'signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'allowedTenants', 'type': '[str]'},
        'authority': {'key': 'authority', 'type': 'str'},
        'signup_policy_name': {'key': 'signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'passwordResetPolicyName', 'type': 'str'},
    }

    def __init__(self, *, type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, **kwargs) -> None:
        super(IdentityProviderBaseParameters, self).__init__(**kwargs)
        self.type = type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name


class IdentityProviderContract(Resource):
    """Identity Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param identity_provider_contract_type: Identity Provider Type identifier.
     Possible values include: 'facebook', 'google', 'microsoft', 'twitter',
     'aad', 'aadB2C'
    :type identity_provider_contract_type: str or
     ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Required. Client Id of the Application in the external
     Identity Provider. It is App ID for Facebook login, Client ID for Google
     login, App ID for Microsoft.
    :type client_id: str
    :param client_secret: Client secret of the Application in external
     Identity Provider, used to authenticate login request. For example, it is
     App Secret for Facebook login, API Key for Google login, Public Key for
     Microsoft. This property will not be filled on 'GET' operations! Use
     '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'required': True, 'min_length': 1},
        'client_secret': {'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'identity_provider_contract_type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_id: str, identity_provider_contract_type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, client_secret: str=None, **kwargs) -> None:
        super(IdentityProviderContract, self).__init__(**kwargs)
        self.identity_provider_contract_type = identity_provider_contract_type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IdentityProviderCreateContract(Resource):
    """Identity Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param identity_provider_create_contract_type: Identity Provider Type
     identifier. Possible values include: 'facebook', 'google', 'microsoft',
     'twitter', 'aad', 'aadB2C'
    :type identity_provider_create_contract_type: str or
     ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Required. Client Id of the Application in the external
     Identity Provider. It is App ID for Facebook login, Client ID for Google
     login, App ID for Microsoft.
    :type client_id: str
    :param client_secret: Required. Client secret of the Application in
     external Identity Provider, used to authenticate login request. For
     example, it is App Secret for Facebook login, API Key for Google login,
     Public Key for Microsoft. This property will not be filled on 'GET'
     operations! Use '/listSecrets' POST request to get the value.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'required': True, 'min_length': 1},
        'client_secret': {'required': True, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'identity_provider_create_contract_type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, client_id: str, client_secret: str, identity_provider_create_contract_type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, **kwargs) -> None:
        super(IdentityProviderCreateContract, self).__init__(**kwargs)
        self.identity_provider_create_contract_type = identity_provider_create_contract_type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IdentityProviderUpdateParameters(Model):
    """Parameters supplied to update Identity Provider.

    :param type: Identity Provider Type identifier. Possible values include:
     'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'
    :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType
    :param signin_tenant: The TenantId to use instead of Common when logging
     into Active Directory
    :type signin_tenant: str
    :param allowed_tenants: List of Allowed Tenants when configuring Azure
     Active Directory login.
    :type allowed_tenants: list[str]
    :param authority: OpenID Connect discovery endpoint hostname for AAD or
     AAD B2C.
    :type authority: str
    :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signup_policy_name: str
    :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C
     Identity Provider.
    :type signin_policy_name: str
    :param profile_editing_policy_name: Profile Editing Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type profile_editing_policy_name: str
    :param password_reset_policy_name: Password Reset Policy Name. Only
     applies to AAD B2C Identity Provider.
    :type password_reset_policy_name: str
    :param client_id: Client Id of the Application in the external Identity
     Provider. It is App ID for Facebook login, Client ID for Google login, App
     ID for Microsoft.
    :type client_id: str
    :param client_secret: Client secret of the Application in external
     Identity Provider, used to authenticate login request. For example, it is
     App Secret for Facebook login, API Key for Google login, Public Key for
     Microsoft.
    :type client_secret: str
    """

    _validation = {
        'allowed_tenants': {'max_items': 32},
        'signup_policy_name': {'min_length': 1},
        'signin_policy_name': {'min_length': 1},
        'profile_editing_policy_name': {'min_length': 1},
        'password_reset_policy_name': {'min_length': 1},
        'client_id': {'min_length': 1},
        'client_secret': {'min_length': 1},
    }

    _attribute_map = {
        'type': {'key': 'properties.type', 'type': 'str'},
        'signin_tenant': {'key': 'properties.signinTenant', 'type': 'str'},
        'allowed_tenants': {'key': 'properties.allowedTenants', 'type': '[str]'},
        'authority': {'key': 'properties.authority', 'type': 'str'},
        'signup_policy_name': {'key': 'properties.signupPolicyName', 'type': 'str'},
        'signin_policy_name': {'key': 'properties.signinPolicyName', 'type': 'str'},
        'profile_editing_policy_name': {'key': 'properties.profileEditingPolicyName', 'type': 'str'},
        'password_reset_policy_name': {'key': 'properties.passwordResetPolicyName', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, type=None, signin_tenant: str=None, allowed_tenants=None, authority: str=None, signup_policy_name: str=None, signin_policy_name: str=None, profile_editing_policy_name: str=None, password_reset_policy_name: str=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(IdentityProviderUpdateParameters, self).__init__(**kwargs)
        self.type = type
        self.signin_tenant = signin_tenant
        self.allowed_tenants = allowed_tenants
        self.authority = authority
        self.signup_policy_name = signup_policy_name
        self.signin_policy_name = signin_policy_name
        self.profile_editing_policy_name = profile_editing_policy_name
        self.password_reset_policy_name = password_reset_policy_name
        self.client_id = client_id
        self.client_secret = client_secret


class IssueAttachmentContract(Resource):
    """Issue Attachment Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Required. Filename by which the binary data will be saved.
    :type title: str
    :param content_format: Required. Either 'link' if content is provided via
     an HTTP link or the MIME type of the Base64-encoded binary data provided
     in the 'content' property.
    :type content_format: str
    :param content: Required. An HTTP link or Base64-encoded binary data.
    :type content: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True},
        'content_format': {'required': True},
        'content': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'content_format': {'key': 'properties.contentFormat', 'type': 'str'},
        'content': {'key': 'properties.content', 'type': 'str'},
    }

    def __init__(self, *, title: str, content_format: str, content: str, **kwargs) -> None:
        super(IssueAttachmentContract, self).__init__(**kwargs)
        self.title = title
        self.content_format = content_format
        self.content = content


class IssueCommentContract(Resource):
    """Issue Comment Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param text: Required. Comment text.
    :type text: str
    :param created_date: Date and time when the comment was created.
    :type created_date: datetime
    :param user_id: Required. A resource identifier for the user who left the
     comment.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'text': {'required': True},
        'user_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'text': {'key': 'properties.text', 'type': 'str'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, text: str, user_id: str, created_date=None, **kwargs) -> None:
        super(IssueCommentContract, self).__init__(**kwargs)
        self.text = text
        self.created_date = created_date
        self.user_id = user_id


class IssueContract(Resource):
    """Issue Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    :param title: Required. The issue title.
    :type title: str
    :param description: Required. Text describing the issue.
    :type description: str
    :param user_id: Required. A resource identifier for the user created the
     issue.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True},
        'description': {'required': True},
        'user_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, title: str, description: str, user_id: str, created_date=None, state=None, api_id: str=None, **kwargs) -> None:
        super(IssueContract, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id
        self.title = title
        self.description = description
        self.user_id = user_id


class IssueContractBaseProperties(Model):
    """Issue contract Base Properties.

    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    """

    _attribute_map = {
        'created_date': {'key': 'createdDate', 'type': 'iso-8601'},
        'state': {'key': 'state', 'type': 'str'},
        'api_id': {'key': 'apiId', 'type': 'str'},
    }

    def __init__(self, *, created_date=None, state=None, api_id: str=None, **kwargs) -> None:
        super(IssueContractBaseProperties, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id


class IssueUpdateContract(Model):
    """Issue update Parameters.

    :param created_date: Date and time when the issue was created.
    :type created_date: datetime
    :param state: Status of the issue. Possible values include: 'proposed',
     'open', 'removed', 'resolved', 'closed'
    :type state: str or ~azure.mgmt.apimanagement.models.State
    :param api_id: A resource identifier for the API the issue was created
     for.
    :type api_id: str
    :param title: The issue title.
    :type title: str
    :param description: Text describing the issue.
    :type description: str
    :param user_id: A resource identifier for the user created the issue.
    :type user_id: str
    """

    _attribute_map = {
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'api_id': {'key': 'properties.apiId', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, created_date=None, state=None, api_id: str=None, title: str=None, description: str=None, user_id: str=None, **kwargs) -> None:
        super(IssueUpdateContract, self).__init__(**kwargs)
        self.created_date = created_date
        self.state = state
        self.api_id = api_id
        self.title = title
        self.description = description
        self.user_id = user_id


class LoggerContract(Resource):
    """Logger details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param logger_type: Required. Logger type. Possible values include:
     'azureEventHub', 'applicationInsights'
    :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType
    :param description: Logger description.
    :type description: str
    :param credentials: Required. The name and SendRule connection string of
     the event hub for azureEventHub logger.
     Instrumentation key for applicationInsights logger.
    :type credentials: dict[str, str]
    :param is_buffered: Whether records are buffered in the logger before
     publishing. Default is assumed to be true.
    :type is_buffered: bool
    :param resource_id: Azure Resource Id of a log target (either Azure Event
     Hub resource or Azure Application Insights resource).
    :type resource_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'logger_type': {'required': True},
        'description': {'max_length': 256},
        'credentials': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'logger_type': {'key': 'properties.loggerType', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'credentials': {'key': 'properties.credentials', 'type': '{str}'},
        'is_buffered': {'key': 'properties.isBuffered', 'type': 'bool'},
        'resource_id': {'key': 'properties.resourceId', 'type': 'str'},
    }

    def __init__(self, *, logger_type, credentials, description: str=None, is_buffered: bool=None, resource_id: str=None, **kwargs) -> None:
        super(LoggerContract, self).__init__(**kwargs)
        self.logger_type = logger_type
        self.description = description
        self.credentials = credentials
        self.is_buffered = is_buffered
        self.resource_id = resource_id


class LoggerUpdateContract(Model):
    """Logger update contract.

    :param logger_type: Logger type. Possible values include: 'azureEventHub',
     'applicationInsights'
    :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType
    :param description: Logger description.
    :type description: str
    :param credentials: Logger credentials.
    :type credentials: dict[str, str]
    :param is_buffered: Whether records are buffered in the logger before
     publishing. Default is assumed to be true.
    :type is_buffered: bool
    """

    _attribute_map = {
        'logger_type': {'key': 'properties.loggerType', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'credentials': {'key': 'properties.credentials', 'type': '{str}'},
        'is_buffered': {'key': 'properties.isBuffered', 'type': 'bool'},
    }

    def __init__(self, *, logger_type=None, description: str=None, credentials=None, is_buffered: bool=None, **kwargs) -> None:
        super(LoggerUpdateContract, self).__init__(**kwargs)
        self.logger_type = logger_type
        self.description = description
        self.credentials = credentials
        self.is_buffered = is_buffered


class NamedValueContract(Resource):
    """NamedValue details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Required. Unique name of NamedValue. It may contain
     only letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Value of the NamedValue. Can contain policy expressions. It
     may not be empty or consist only of whitespace. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type value: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'tags': {'max_items': 32},
        'display_name': {'required': True, 'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, tags=None, secret: bool=None, value: str=None, **kwargs) -> None:
        super(NamedValueContract, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NamedValueCreateContract(Resource):
    """NamedValue details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Required. Unique name of NamedValue. It may contain
     only letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Required. Value of the NamedValue. Can contain policy
     expressions. It may not be empty or consist only of whitespace. This
     property will not be filled on 'GET' operations! Use '/listSecrets' POST
     request to get the value.
    :type value: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'tags': {'max_items': 32},
        'display_name': {'required': True, 'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'required': True, 'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, value: str, tags=None, secret: bool=None, **kwargs) -> None:
        super(NamedValueCreateContract, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NamedValueEntityBaseParameters(Model):
    """NamedValue Entity Base Parameters set.

    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    """

    _validation = {
        'tags': {'max_items': 32},
    }

    _attribute_map = {
        'tags': {'key': 'tags', 'type': '[str]'},
        'secret': {'key': 'secret', 'type': 'bool'},
    }

    def __init__(self, *, tags=None, secret: bool=None, **kwargs) -> None:
        super(NamedValueEntityBaseParameters, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret


class NamedValueUpdateParameters(Model):
    """NamedValue update Parameters.

    :param tags: Optional tags that when provided can be used to filter the
     NamedValue list.
    :type tags: list[str]
    :param secret: Determines whether the value is a secret and should be
     encrypted or not. Default value is false.
    :type secret: bool
    :param display_name: Unique name of NamedValue. It may contain only
     letters, digits, period, dash, and underscore characters.
    :type display_name: str
    :param value: Value of the NamedValue. Can contain policy expressions. It
     may not be empty or consist only of whitespace.
    :type value: str
    """

    _validation = {
        'tags': {'max_items': 32},
        'display_name': {'max_length': 256, 'min_length': 1, 'pattern': r'^[A-Za-z0-9-._]+$'},
        'value': {'max_length': 4096, 'min_length': 1},
    }

    _attribute_map = {
        'tags': {'key': 'properties.tags', 'type': '[str]'},
        'secret': {'key': 'properties.secret', 'type': 'bool'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
    }

    def __init__(self, *, tags=None, secret: bool=None, display_name: str=None, value: str=None, **kwargs) -> None:
        super(NamedValueUpdateParameters, self).__init__(**kwargs)
        self.tags = tags
        self.secret = secret
        self.display_name = display_name
        self.value = value


class NetworkStatusContract(Model):
    """Network Status details.

    All required parameters must be populated in order to send to Azure.

    :param dns_servers: Required. Gets the list of DNS servers IPV4 addresses.
    :type dns_servers: list[str]
    :param connectivity_status: Required. Gets the list of Connectivity Status
     to the Resources on which the service depends upon.
    :type connectivity_status:
     list[~azure.mgmt.apimanagement.models.ConnectivityStatusContract]
    """

    _validation = {
        'dns_servers': {'required': True},
        'connectivity_status': {'required': True},
    }

    _attribute_map = {
        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
        'connectivity_status': {'key': 'connectivityStatus', 'type': '[ConnectivityStatusContract]'},
    }

    def __init__(self, *, dns_servers, connectivity_status, **kwargs) -> None:
        super(NetworkStatusContract, self).__init__(**kwargs)
        self.dns_servers = dns_servers
        self.connectivity_status = connectivity_status


class NetworkStatusContractByLocation(Model):
    """Network Status in the Location.

    :param location: Location of service
    :type location: str
    :param network_status: Network status in Location
    :type network_status:
     ~azure.mgmt.apimanagement.models.NetworkStatusContract
    """

    _validation = {
        'location': {'min_length': 1},
    }

    _attribute_map = {
        'location': {'key': 'location', 'type': 'str'},
        'network_status': {'key': 'networkStatus', 'type': 'NetworkStatusContract'},
    }

    def __init__(self, *, location: str=None, network_status=None, **kwargs) -> None:
        super(NetworkStatusContractByLocation, self).__init__(**kwargs)
        self.location = location
        self.network_status = network_status


class NotificationContract(Resource):
    """Notification details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param title: Required. Title of the Notification.
    :type title: str
    :param description: Description of the Notification.
    :type description: str
    :param recipients: Recipient Parameter values.
    :type recipients:
     ~azure.mgmt.apimanagement.models.RecipientsContractProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'title': {'required': True, 'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'title': {'key': 'properties.title', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'recipients': {'key': 'properties.recipients', 'type': 'RecipientsContractProperties'},
    }

    def __init__(self, *, title: str, description: str=None, recipients=None, **kwargs) -> None:
        super(NotificationContract, self).__init__(**kwargs)
        self.title = title
        self.description = description
        self.recipients = recipients


class OAuth2AuthenticationSettingsContract(Model):
    """API OAuth2 Authentication settings details.

    :param authorization_server_id: OAuth authorization server identifier.
    :type authorization_server_id: str
    :param scope: operations scope.
    :type scope: str
    """

    _attribute_map = {
        'authorization_server_id': {'key': 'authorizationServerId', 'type': 'str'},
        'scope': {'key': 'scope', 'type': 'str'},
    }

    def __init__(self, *, authorization_server_id: str=None, scope: str=None, **kwargs) -> None:
        super(OAuth2AuthenticationSettingsContract, self).__init__(**kwargs)
        self.authorization_server_id = authorization_server_id
        self.scope = scope


class OpenIdAuthenticationSettingsContract(Model):
    """API OAuth2 Authentication settings details.

    :param openid_provider_id: OAuth authorization server identifier.
    :type openid_provider_id: str
    :param bearer_token_sending_methods: How to send token to the server.
    :type bearer_token_sending_methods: list[str or
     ~azure.mgmt.apimanagement.models.BearerTokenSendingMethods]
    """

    _attribute_map = {
        'openid_provider_id': {'key': 'openidProviderId', 'type': 'str'},
        'bearer_token_sending_methods': {'key': 'bearerTokenSendingMethods', 'type': '[str]'},
    }

    def __init__(self, *, openid_provider_id: str=None, bearer_token_sending_methods=None, **kwargs) -> None:
        super(OpenIdAuthenticationSettingsContract, self).__init__(**kwargs)
        self.openid_provider_id = openid_provider_id
        self.bearer_token_sending_methods = bearer_token_sending_methods


class OpenidConnectProviderContract(Resource):
    """OpenId Connect Provider details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. User-friendly OpenID Connect Provider name.
    :type display_name: str
    :param description: User-friendly description of OpenID Connect Provider.
    :type description: str
    :param metadata_endpoint: Required. Metadata endpoint URI.
    :type metadata_endpoint: str
    :param client_id: Required. Client ID of developer console which is the
     client application.
    :type client_id: str
    :param client_secret: Client Secret of developer console which is the
     client application.
    :type client_secret: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 50},
        'metadata_endpoint': {'required': True},
        'client_id': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'metadata_endpoint': {'key': 'properties.metadataEndpoint', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, metadata_endpoint: str, client_id: str, description: str=None, client_secret: str=None, **kwargs) -> None:
        super(OpenidConnectProviderContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.metadata_endpoint = metadata_endpoint
        self.client_id = client_id
        self.client_secret = client_secret


class OpenidConnectProviderUpdateContract(Model):
    """Parameters supplied to the Update OpenID Connect Provider operation.

    :param display_name: User-friendly OpenID Connect Provider name.
    :type display_name: str
    :param description: User-friendly description of OpenID Connect Provider.
    :type description: str
    :param metadata_endpoint: Metadata endpoint URI.
    :type metadata_endpoint: str
    :param client_id: Client ID of developer console which is the client
     application.
    :type client_id: str
    :param client_secret: Client Secret of developer console which is the
     client application.
    :type client_secret: str
    """

    _validation = {
        'display_name': {'max_length': 50},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'metadata_endpoint': {'key': 'properties.metadataEndpoint', 'type': 'str'},
        'client_id': {'key': 'properties.clientId', 'type': 'str'},
        'client_secret': {'key': 'properties.clientSecret', 'type': 'str'},
    }

    def __init__(self, *, display_name: str=None, description: str=None, metadata_endpoint: str=None, client_id: str=None, client_secret: str=None, **kwargs) -> None:
        super(OpenidConnectProviderUpdateContract, self).__init__(**kwargs)
        self.display_name = display_name
        self.description = description
        self.metadata_endpoint = metadata_endpoint
        self.client_id = client_id
        self.client_secret = client_secret


class Operation(Model):
    """REST API operation.

    :param name: Operation name: {provider}/{resource}/{operation}
    :type name: str
    :param display: The object that describes the operation.
    :type display: ~azure.mgmt.apimanagement.models.OperationDisplay
    :param origin: The operation origin.
    :type origin: str
    :param properties: The operation properties.
    :type properties: object
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'display': {'key': 'display', 'type': 'OperationDisplay'},
        'origin': {'key': 'origin', 'type': 'str'},
        'properties': {'key': 'properties', 'type': 'object'},
    }

    def __init__(self, *, name: str=None, display=None, origin: str=None, properties=None, **kwargs) -> None:
        super(Operation, self).__init__(**kwargs)
        self.name = name
        self.display = display
        self.origin = origin
        self.properties = properties


class OperationContract(Resource):
    """Api Operation details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    :param display_name: Required. Operation Name.
    :type display_name: str
    :param method: Required. A Valid HTTP Operation Method. Typical Http
     Methods like GET, PUT, POST but not limited by only them.
    :type method: str
    :param url_template: Required. Relative URL template identifying the
     target resource for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :type url_template: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
        'method': {'required': True},
        'url_template': {'required': True, 'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'template_parameters': {'key': 'properties.templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'request': {'key': 'properties.request', 'type': 'RequestContract'},
        'responses': {'key': 'properties.responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'properties.policies', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'method': {'key': 'properties.method', 'type': 'str'},
        'url_template': {'key': 'properties.urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, method: str, url_template: str, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, **kwargs) -> None:
        super(OperationContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies
        self.display_name = display_name
        self.method = method
        self.url_template = url_template


class OperationDisplay(Model):
    """The object that describes the operation.

    :param provider: Friendly name of the resource provider
    :type provider: str
    :param operation: Operation type: read, write, delete, listKeys/action,
     etc.
    :type operation: str
    :param resource: Resource type on which the operation is performed.
    :type resource: str
    :param description: Friendly name of the operation
    :type description: str
    """

    _attribute_map = {
        'provider': {'key': 'provider', 'type': 'str'},
        'operation': {'key': 'operation', 'type': 'str'},
        'resource': {'key': 'resource', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
    }

    def __init__(self, *, provider: str=None, operation: str=None, resource: str=None, description: str=None, **kwargs) -> None:
        super(OperationDisplay, self).__init__(**kwargs)
        self.provider = provider
        self.operation = operation
        self.resource = resource
        self.description = description


class OperationEntityBaseContract(Model):
    """Api Operation Entity Base Contract details.

    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    """

    _validation = {
        'description': {'max_length': 1000},
    }

    _attribute_map = {
        'template_parameters': {'key': 'templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'description', 'type': 'str'},
        'request': {'key': 'request', 'type': 'RequestContract'},
        'responses': {'key': 'responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'policies', 'type': 'str'},
    }

    def __init__(self, *, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, **kwargs) -> None:
        super(OperationEntityBaseContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies


class OperationResultContract(Model):
    """Operation Result.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param id: Operation result identifier.
    :type id: str
    :param status: Status of an async operation. Possible values include:
     'Started', 'InProgress', 'Succeeded', 'Failed'
    :type status: str or ~azure.mgmt.apimanagement.models.AsyncOperationStatus
    :param started: Start time of an async operation. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type started: datetime
    :param updated: Last update time of an async operation. The date conforms
     to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO
     8601 standard.
    :type updated: datetime
    :param result_info: Optional result info.
    :type result_info: str
    :param error: Error Body Contract
    :type error: ~azure.mgmt.apimanagement.models.ErrorResponseBody
    :ivar action_log: This property if only provided as part of the
     TenantConfiguration_Validate operation. It contains the log the entities
     which will be updated/created/deleted as part of the
     TenantConfiguration_Deploy operation.
    :vartype action_log:
     list[~azure.mgmt.apimanagement.models.OperationResultLogItemContract]
    """

    _validation = {
        'action_log': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'status': {'key': 'status', 'type': 'AsyncOperationStatus'},
        'started': {'key': 'started', 'type': 'iso-8601'},
        'updated': {'key': 'updated', 'type': 'iso-8601'},
        'result_info': {'key': 'resultInfo', 'type': 'str'},
        'error': {'key': 'error', 'type': 'ErrorResponseBody'},
        'action_log': {'key': 'actionLog', 'type': '[OperationResultLogItemContract]'},
    }

    def __init__(self, *, id: str=None, status=None, started=None, updated=None, result_info: str=None, error=None, **kwargs) -> None:
        super(OperationResultContract, self).__init__(**kwargs)
        self.id = id
        self.status = status
        self.started = started
        self.updated = updated
        self.result_info = result_info
        self.error = error
        self.action_log = None


class OperationResultLogItemContract(Model):
    """Log of the entity being created, updated or deleted.

    :param object_type: The type of entity contract.
    :type object_type: str
    :param action: Action like create/update/delete.
    :type action: str
    :param object_key: Identifier of the entity being created/updated/deleted.
    :type object_key: str
    """

    _attribute_map = {
        'object_type': {'key': 'objectType', 'type': 'str'},
        'action': {'key': 'action', 'type': 'str'},
        'object_key': {'key': 'objectKey', 'type': 'str'},
    }

    def __init__(self, *, object_type: str=None, action: str=None, object_key: str=None, **kwargs) -> None:
        super(OperationResultLogItemContract, self).__init__(**kwargs)
        self.object_type = object_type
        self.action = action
        self.object_key = object_key


class OperationTagResourceContractProperties(Model):
    """Operation Entity contract Properties.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param id: Identifier of the operation in form /operations/{operationId}.
    :type id: str
    :ivar name: Operation name.
    :vartype name: str
    :ivar api_name: Api Name.
    :vartype api_name: str
    :ivar api_revision: Api Revision.
    :vartype api_revision: str
    :ivar api_version: Api Version.
    :vartype api_version: str
    :ivar description: Operation Description.
    :vartype description: str
    :ivar method: A Valid HTTP Operation Method. Typical Http Methods like
     GET, PUT, POST but not limited by only them.
    :vartype method: str
    :ivar url_template: Relative URL template identifying the target resource
     for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :vartype url_template: str
    """

    _validation = {
        'name': {'readonly': True},
        'api_name': {'readonly': True},
        'api_revision': {'readonly': True},
        'api_version': {'readonly': True},
        'description': {'readonly': True},
        'method': {'readonly': True},
        'url_template': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'api_name': {'key': 'apiName', 'type': 'str'},
        'api_revision': {'key': 'apiRevision', 'type': 'str'},
        'api_version': {'key': 'apiVersion', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'method': {'key': 'method', 'type': 'str'},
        'url_template': {'key': 'urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, **kwargs) -> None:
        super(OperationTagResourceContractProperties, self).__init__(**kwargs)
        self.id = id
        self.name = None
        self.api_name = None
        self.api_revision = None
        self.api_version = None
        self.description = None
        self.method = None
        self.url_template = None


class OperationUpdateContract(Model):
    """Api Operation Update Contract details.

    :param template_parameters: Collection of URL template parameters.
    :type template_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param description: Description of the operation. May include HTML
     formatting tags.
    :type description: str
    :param request: An entity containing request details.
    :type request: ~azure.mgmt.apimanagement.models.RequestContract
    :param responses: Array of Operation responses.
    :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]
    :param policies: Operation Policies
    :type policies: str
    :param display_name: Operation Name.
    :type display_name: str
    :param method: A Valid HTTP Operation Method. Typical Http Methods like
     GET, PUT, POST but not limited by only them.
    :type method: str
    :param url_template: Relative URL template identifying the target resource
     for this operation. May include parameters. Example:
     /customers/{cid}/orders/{oid}/?date={date}
    :type url_template: str
    """

    _validation = {
        'description': {'max_length': 1000},
        'display_name': {'max_length': 300, 'min_length': 1},
        'url_template': {'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'template_parameters': {'key': 'properties.templateParameters', 'type': '[ParameterContract]'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'request': {'key': 'properties.request', 'type': 'RequestContract'},
        'responses': {'key': 'properties.responses', 'type': '[ResponseContract]'},
        'policies': {'key': 'properties.policies', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'method': {'key': 'properties.method', 'type': 'str'},
        'url_template': {'key': 'properties.urlTemplate', 'type': 'str'},
    }

    def __init__(self, *, template_parameters=None, description: str=None, request=None, responses=None, policies: str=None, display_name: str=None, method: str=None, url_template: str=None, **kwargs) -> None:
        super(OperationUpdateContract, self).__init__(**kwargs)
        self.template_parameters = template_parameters
        self.description = description
        self.request = request
        self.responses = responses
        self.policies = policies
        self.display_name = display_name
        self.method = method
        self.url_template = url_template


class ParameterContract(Model):
    """Operation parameters details.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. Parameter name.
    :type name: str
    :param description: Parameter description.
    :type description: str
    :param type: Required. Parameter type.
    :type type: str
    :param default_value: Default parameter value.
    :type default_value: str
    :param required: Specifies whether parameter is required or not.
    :type required: bool
    :param values: Parameter values.
    :type values: list[str]
    """

    _validation = {
        'name': {'required': True},
        'type': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'description': {'key': 'description', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'default_value': {'key': 'defaultValue', 'type': 'str'},
        'required': {'key': 'required', 'type': 'bool'},
        'values': {'key': 'values', 'type': '[str]'},
    }

    def __init__(self, *, name: str, type: str, description: str=None, default_value: str=None, required: bool=None, values=None, **kwargs) -> None:
        super(ParameterContract, self).__init__(**kwargs)
        self.name = name
        self.description = description
        self.type = type
        self.default_value = default_value
        self.required = required
        self.values = values


class PipelineDiagnosticSettings(Model):
    """Diagnostic settings for incoming/outgoing HTTP messages to the Gateway.

    :param request: Diagnostic settings for request.
    :type request: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic
    :param response: Diagnostic settings for response.
    :type response: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic
    """

    _attribute_map = {
        'request': {'key': 'request', 'type': 'HttpMessageDiagnostic'},
        'response': {'key': 'response', 'type': 'HttpMessageDiagnostic'},
    }

    def __init__(self, *, request=None, response=None, **kwargs) -> None:
        super(PipelineDiagnosticSettings, self).__init__(**kwargs)
        self.request = request
        self.response = response


class PolicyCollection(Model):
    """The response of the list policy operation.

    :param value: Policy Contract value.
    :type value: list[~azure.mgmt.apimanagement.models.PolicyContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[PolicyContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(PolicyCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class PolicyContract(Resource):
    """Policy Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param value: Required. Contents of the Policy as defined by the format.
    :type value: str
    :param format: Format of the policyContent. Possible values include:
     'xml', 'xml-link', 'rawxml', 'rawxml-link'. Default value: "xml" .
    :type format: str or ~azure.mgmt.apimanagement.models.PolicyContentFormat
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'value': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'value': {'key': 'properties.value', 'type': 'str'},
        'format': {'key': 'properties.format', 'type': 'str'},
    }

    def __init__(self, *, value: str, format="xml", **kwargs) -> None:
        super(PolicyContract, self).__init__(**kwargs)
        self.value = value
        self.format = format


class PolicyDescriptionCollection(Model):
    """Descriptions of APIM policies.

    :param value: Descriptions of APIM policies.
    :type value:
     list[~azure.mgmt.apimanagement.models.PolicyDescriptionContract]
    :param count: Total record count number.
    :type count: long
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[PolicyDescriptionContract]'},
        'count': {'key': 'count', 'type': 'long'},
    }

    def __init__(self, *, value=None, count: int=None, **kwargs) -> None:
        super(PolicyDescriptionCollection, self).__init__(**kwargs)
        self.value = value
        self.count = count


class PolicyDescriptionContract(Resource):
    """Policy description details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :ivar description: Policy description.
    :vartype description: str
    :ivar scope: Binary OR value of the Snippet scope.
    :vartype scope: int
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'readonly': True},
        'scope': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'int'},
    }

    def __init__(self, **kwargs) -> None:
        super(PolicyDescriptionContract, self).__init__(**kwargs)
        self.description = None
        self.scope = None


class PortalDelegationSettings(Resource):
    """Delegation settings for a developer portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param url: A delegation Url.
    :type url: str
    :param validation_key: A base64-encoded validation key to validate, that a
     request is coming from Azure API Management.
    :type validation_key: str
    :param subscriptions: Subscriptions delegation settings.
    :type subscriptions:
     ~azure.mgmt.apimanagement.models.SubscriptionsDelegationSettingsProperties
    :param user_registration: User registration delegation settings.
    :type user_registration:
     ~azure.mgmt.apimanagement.models.RegistrationDelegationSettingsProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'url': {'key': 'properties.url', 'type': 'str'},
        'validation_key': {'key': 'properties.validationKey', 'type': 'str'},
        'subscriptions': {'key': 'properties.subscriptions', 'type': 'SubscriptionsDelegationSettingsProperties'},
        'user_registration': {'key': 'properties.userRegistration', 'type': 'RegistrationDelegationSettingsProperties'},
    }

    def __init__(self, *, url: str=None, validation_key: str=None, subscriptions=None, user_registration=None, **kwargs) -> None:
        super(PortalDelegationSettings, self).__init__(**kwargs)
        self.url = url
        self.validation_key = validation_key
        self.subscriptions = subscriptions
        self.user_registration = user_registration


class PortalSettingValidationKeyContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param validation_key: This is secret value of the validation key in
     portal settings.
    :type validation_key: str
    """

    _attribute_map = {
        'validation_key': {'key': 'validationKey', 'type': 'str'},
    }

    def __init__(self, *, validation_key: str=None, **kwargs) -> None:
        super(PortalSettingValidationKeyContract, self).__init__(**kwargs)
        self.validation_key = validation_key


class PortalSigninSettings(Resource):
    """Sign-In settings for the Developer Portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param enabled: Redirect Anonymous users to the Sign-In page.
    :type enabled: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(PortalSigninSettings, self).__init__(**kwargs)
        self.enabled = enabled


class PortalSignupSettings(Resource):
    """Sign-Up settings for a developer portal.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param enabled: Allow users to sign up on a developer portal.
    :type enabled: bool
    :param terms_of_service: Terms of service contract properties.
    :type terms_of_service:
     ~azure.mgmt.apimanagement.models.TermsOfServiceProperties
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'enabled': {'key': 'properties.enabled', 'type': 'bool'},
        'terms_of_service': {'key': 'properties.termsOfService', 'type': 'TermsOfServiceProperties'},
    }

    def __init__(self, *, enabled: bool=None, terms_of_service=None, **kwargs) -> None:
        super(PortalSignupSettings, self).__init__(**kwargs)
        self.enabled = enabled
        self.terms_of_service = terms_of_service


class ProductContract(Resource):
    """Product details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param display_name: Required. Product name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'description': {'max_length': 1000, 'min_length': 1},
        'display_name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'terms': {'key': 'properties.terms', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'properties.approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'properties.subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'properties.state', 'type': 'ProductState'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, **kwargs) -> None:
        super(ProductContract, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state
        self.display_name = display_name


class ProductEntityBaseParameters(Model):
    """Product Entity Base Parameters.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'terms': {'key': 'terms', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'state', 'type': 'ProductState'},
    }

    def __init__(self, *, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, **kwargs) -> None:
        super(ProductEntityBaseParameters, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state


class ProductTagResourceContractProperties(ProductEntityBaseParameters):
    """Product profile.

    All required parameters must be populated in order to send to Azure.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param id: Identifier of the product in the form of /products/{productId}
    :type id: str
    :param name: Required. Product name.
    :type name: str
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
        'name': {'required': True, 'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'terms': {'key': 'terms', 'type': 'str'},
        'subscription_required': {'key': 'subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'state', 'type': 'ProductState'},
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name: str, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, id: str=None, **kwargs) -> None:
        super(ProductTagResourceContractProperties, self).__init__(description=description, terms=terms, subscription_required=subscription_required, approval_required=approval_required, subscriptions_limit=subscriptions_limit, state=state, **kwargs)
        self.id = id
        self.name = name


class ProductUpdateParameters(Model):
    """Product Update parameters.

    :param description: Product description. May include HTML formatting tags.
    :type description: str
    :param terms: Product terms of use. Developers trying to subscribe to the
     product will be presented and required to accept these terms before they
     can complete the subscription process.
    :type terms: str
    :param subscription_required: Whether a product subscription is required
     for accessing APIs included in this product. If true, the product is
     referred to as "protected" and a valid subscription key is required for a
     request to an API included in the product to succeed. If false, the
     product is referred to as "open" and requests to an API included in the
     product can be made without a subscription key. If property is omitted
     when creating a new product it's value is assumed to be true.
    :type subscription_required: bool
    :param approval_required: whether subscription approval is required. If
     false, new subscriptions will be approved automatically enabling
     developers to call the product’s APIs immediately after subscribing. If
     true, administrators must manually approve the subscription before the
     developer can any of the product’s APIs. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type approval_required: bool
    :param subscriptions_limit: Whether the number of subscriptions a user can
     have to this product at the same time. Set to null or omit to allow
     unlimited per user subscriptions. Can be present only if
     subscriptionRequired property is present and has a value of false.
    :type subscriptions_limit: int
    :param state: whether product is published or not. Published products are
     discoverable by users of developer portal. Non published products are
     visible only to administrators. Default state of Product is notPublished.
     Possible values include: 'notPublished', 'published'
    :type state: str or ~azure.mgmt.apimanagement.models.ProductState
    :param display_name: Product name.
    :type display_name: str
    """

    _validation = {
        'description': {'max_length': 1000, 'min_length': 1},
        'display_name': {'max_length': 300, 'min_length': 1},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'terms': {'key': 'properties.terms', 'type': 'str'},
        'subscription_required': {'key': 'properties.subscriptionRequired', 'type': 'bool'},
        'approval_required': {'key': 'properties.approvalRequired', 'type': 'bool'},
        'subscriptions_limit': {'key': 'properties.subscriptionsLimit', 'type': 'int'},
        'state': {'key': 'properties.state', 'type': 'ProductState'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, terms: str=None, subscription_required: bool=None, approval_required: bool=None, subscriptions_limit: int=None, state=None, display_name: str=None, **kwargs) -> None:
        super(ProductUpdateParameters, self).__init__(**kwargs)
        self.description = description
        self.terms = terms
        self.subscription_required = subscription_required
        self.approval_required = approval_required
        self.subscriptions_limit = subscriptions_limit
        self.state = state
        self.display_name = display_name


class PropertyValueContract(Model):
    """Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.

    :param value: This is secret value of the NamedValue entity.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(PropertyValueContract, self).__init__(**kwargs)
        self.value = value


class QuotaCounterCollection(Model):
    """Paged Quota Counter list representation.

    :param value: Quota counter values.
    :type value: list[~azure.mgmt.apimanagement.models.QuotaCounterContract]
    :param count: Total record count number across all pages.
    :type count: long
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[QuotaCounterContract]'},
        'count': {'key': 'count', 'type': 'long'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, count: int=None, next_link: str=None, **kwargs) -> None:
        super(QuotaCounterCollection, self).__init__(**kwargs)
        self.value = value
        self.count = count
        self.next_link = next_link


class QuotaCounterContract(Model):
    """Quota counter details.

    All required parameters must be populated in order to send to Azure.

    :param counter_key: Required. The Key value of the Counter. Must not be
     empty.
    :type counter_key: str
    :param period_key: Required. Identifier of the Period for which the
     counter was collected. Must not be empty.
    :type period_key: str
    :param period_start_time: Required. The date of the start of Counter
     Period. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type period_start_time: datetime
    :param period_end_time: Required. The date of the end of Counter Period.
     The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type period_end_time: datetime
    :param value: Quota Value Properties
    :type value:
     ~azure.mgmt.apimanagement.models.QuotaCounterValueContractProperties
    """

    _validation = {
        'counter_key': {'required': True, 'min_length': 1},
        'period_key': {'required': True, 'min_length': 1},
        'period_start_time': {'required': True},
        'period_end_time': {'required': True},
    }

    _attribute_map = {
        'counter_key': {'key': 'counterKey', 'type': 'str'},
        'period_key': {'key': 'periodKey', 'type': 'str'},
        'period_start_time': {'key': 'periodStartTime', 'type': 'iso-8601'},
        'period_end_time': {'key': 'periodEndTime', 'type': 'iso-8601'},
        'value': {'key': 'value', 'type': 'QuotaCounterValueContractProperties'},
    }

    def __init__(self, *, counter_key: str, period_key: str, period_start_time, period_end_time, value=None, **kwargs) -> None:
        super(QuotaCounterContract, self).__init__(**kwargs)
        self.counter_key = counter_key
        self.period_key = period_key
        self.period_start_time = period_start_time
        self.period_end_time = period_end_time
        self.value = value


class QuotaCounterValueContract(Model):
    """Quota counter value details.

    :param calls_count: Number of times Counter was called.
    :type calls_count: int
    :param kb_transferred: Data Transferred in KiloBytes.
    :type kb_transferred: float
    """

    _attribute_map = {
        'calls_count': {'key': 'value.callsCount', 'type': 'int'},
        'kb_transferred': {'key': 'value.kbTransferred', 'type': 'float'},
    }

    def __init__(self, *, calls_count: int=None, kb_transferred: float=None, **kwargs) -> None:
        super(QuotaCounterValueContract, self).__init__(**kwargs)
        self.calls_count = calls_count
        self.kb_transferred = kb_transferred


class QuotaCounterValueContractProperties(Model):
    """Quota counter value details.

    :param calls_count: Number of times Counter was called.
    :type calls_count: int
    :param kb_transferred: Data Transferred in KiloBytes.
    :type kb_transferred: float
    """

    _attribute_map = {
        'calls_count': {'key': 'callsCount', 'type': 'int'},
        'kb_transferred': {'key': 'kbTransferred', 'type': 'float'},
    }

    def __init__(self, *, calls_count: int=None, kb_transferred: float=None, **kwargs) -> None:
        super(QuotaCounterValueContractProperties, self).__init__(**kwargs)
        self.calls_count = calls_count
        self.kb_transferred = kb_transferred


class RecipientEmailCollection(Model):
    """Paged Recipient User list representation.

    :param value: Page values.
    :type value: list[~azure.mgmt.apimanagement.models.RecipientEmailContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[RecipientEmailContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(RecipientEmailCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class RecipientEmailContract(Resource):
    """Recipient Email details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param email: User Email subscribed to notification.
    :type email: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'email': {'key': 'properties.email', 'type': 'str'},
    }

    def __init__(self, *, email: str=None, **kwargs) -> None:
        super(RecipientEmailContract, self).__init__(**kwargs)
        self.email = email


class RecipientsContractProperties(Model):
    """Notification Parameter contract.

    :param emails: List of Emails subscribed for the notification.
    :type emails: list[str]
    :param users: List of Users subscribed for the notification.
    :type users: list[str]
    """

    _attribute_map = {
        'emails': {'key': 'emails', 'type': '[str]'},
        'users': {'key': 'users', 'type': '[str]'},
    }

    def __init__(self, *, emails=None, users=None, **kwargs) -> None:
        super(RecipientsContractProperties, self).__init__(**kwargs)
        self.emails = emails
        self.users = users


class RecipientUserCollection(Model):
    """Paged Recipient User list representation.

    :param value: Page values.
    :type value: list[~azure.mgmt.apimanagement.models.RecipientUserContract]
    :param next_link: Next page link if any.
    :type next_link: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': '[RecipientUserContract]'},
        'next_link': {'key': 'nextLink', 'type': 'str'},
    }

    def __init__(self, *, value=None, next_link: str=None, **kwargs) -> None:
        super(RecipientUserCollection, self).__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class RecipientUserContract(Resource):
    """Recipient User details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param user_id: API Management UserId subscribed to notification.
    :type user_id: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'user_id': {'key': 'properties.userId', 'type': 'str'},
    }

    def __init__(self, *, user_id: str=None, **kwargs) -> None:
        super(RecipientUserContract, self).__init__(**kwargs)
        self.user_id = user_id


class RegionContract(Model):
    """Region profile.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar name: Region name.
    :vartype name: str
    :param is_master_region: whether Region is the master region.
    :type is_master_region: bool
    :param is_deleted: whether Region is deleted.
    :type is_deleted: bool
    """

    _validation = {
        'name': {'readonly': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'is_master_region': {'key': 'isMasterRegion', 'type': 'bool'},
        'is_deleted': {'key': 'isDeleted', 'type': 'bool'},
    }

    def __init__(self, *, is_master_region: bool=None, is_deleted: bool=None, **kwargs) -> None:
        super(RegionContract, self).__init__(**kwargs)
        self.name = None
        self.is_master_region = is_master_region
        self.is_deleted = is_deleted


class RegistrationDelegationSettingsProperties(Model):
    """User registration delegation settings properties.

    :param enabled: Enable or disable delegation for user registration.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(RegistrationDelegationSettingsProperties, self).__init__(**kwargs)
        self.enabled = enabled


class ReportRecordContract(Model):
    """Report data.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param name: Name depending on report endpoint specifies product, API,
     operation or developer name.
    :type name: str
    :param timestamp: Start of aggregation period. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type timestamp: datetime
    :param interval: Length of aggregation period.  Interval must be multiple
     of 15 minutes and may not be zero. The value should be in ISO 8601 format
     (http://en.wikipedia.org/wiki/ISO_8601#Durations).
    :type interval: str
    :param country: Country to which this record data is related.
    :type country: str
    :param region: Country region to which this record data is related.
    :type region: str
    :param zip: Zip code to which this record data is related.
    :type zip: str
    :ivar user_id: User identifier path. /users/{userId}
    :vartype user_id: str
    :ivar product_id: Product identifier path. /products/{productId}
    :vartype product_id: str
    :param api_id: API identifier path. /apis/{apiId}
    :type api_id: str
    :param operation_id: Operation identifier path.
     /apis/{apiId}/operations/{operationId}
    :type operation_id: str
    :param api_region: API region identifier.
    :type api_region: str
    :param subscription_id: Subscription identifier path.
     /subscriptions/{subscriptionId}
    :type subscription_id: str
    :param call_count_success: Number of successful calls. This includes calls
     returning HttpStatusCode <= 301 and HttpStatusCode.NotModified and
     HttpStatusCode.TemporaryRedirect
    :type call_count_success: int
    :param call_count_blocked: Number of calls blocked due to invalid
     credentials. This includes calls returning HttpStatusCode.Unauthorized and
     HttpStatusCode.Forbidden and HttpStatusCode.TooManyRequests
    :type call_count_blocked: int
    :param call_count_failed: Number of calls failed due to proxy or backend
     errors. This includes calls returning HttpStatusCode.BadRequest(400) and
     any Code between HttpStatusCode.InternalServerError (500) and 600
    :type call_count_failed: int
    :param call_count_other: Number of other calls.
    :type call_count_other: int
    :param call_count_total: Total number of calls.
    :type call_count_total: int
    :param bandwidth: Bandwidth consumed.
    :type bandwidth: long
    :param cache_hit_count: Number of times when content was served from cache
     policy.
    :type cache_hit_count: int
    :param cache_miss_count: Number of times content was fetched from backend.
    :type cache_miss_count: int
    :param api_time_avg: Average time it took to process request.
    :type api_time_avg: float
    :param api_time_min: Minimum time it took to process request.
    :type api_time_min: float
    :param api_time_max: Maximum time it took to process request.
    :type api_time_max: float
    :param service_time_avg: Average time it took to process request on
     backend.
    :type service_time_avg: float
    :param service_time_min: Minimum time it took to process request on
     backend.
    :type service_time_min: float
    :param service_time_max: Maximum time it took to process request on
     backend.
    :type service_time_max: float
    """

    _validation = {
        'user_id': {'readonly': True},
        'product_id': {'readonly': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
        'interval': {'key': 'interval', 'type': 'str'},
        'country': {'key': 'country', 'type': 'str'},
        'region': {'key': 'region', 'type': 'str'},
        'zip': {'key': 'zip', 'type': 'str'},
        'user_id': {'key': 'userId', 'type': 'str'},
        'product_id': {'key': 'productId', 'type': 'str'},
        'api_id': {'key': 'apiId', 'type': 'str'},
        'operation_id': {'key': 'operationId', 'type': 'str'},
        'api_region': {'key': 'apiRegion', 'type': 'str'},
        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
        'call_count_success': {'key': 'callCountSuccess', 'type': 'int'},
        'call_count_blocked': {'key': 'callCountBlocked', 'type': 'int'},
        'call_count_failed': {'key': 'callCountFailed', 'type': 'int'},
        'call_count_other': {'key': 'callCountOther', 'type': 'int'},
        'call_count_total': {'key': 'callCountTotal', 'type': 'int'},
        'bandwidth': {'key': 'bandwidth', 'type': 'long'},
        'cache_hit_count': {'key': 'cacheHitCount', 'type': 'int'},
        'cache_miss_count': {'key': 'cacheMissCount', 'type': 'int'},
        'api_time_avg': {'key': 'apiTimeAvg', 'type': 'float'},
        'api_time_min': {'key': 'apiTimeMin', 'type': 'float'},
        'api_time_max': {'key': 'apiTimeMax', 'type': 'float'},
        'service_time_avg': {'key': 'serviceTimeAvg', 'type': 'float'},
        'service_time_min': {'key': 'serviceTimeMin', 'type': 'float'},
        'service_time_max': {'key': 'serviceTimeMax', 'type': 'float'},
    }

    def __init__(self, *, name: str=None, timestamp=None, interval: str=None, country: str=None, region: str=None, zip: str=None, api_id: str=None, operation_id: str=None, api_region: str=None, subscription_id: str=None, call_count_success: int=None, call_count_blocked: int=None, call_count_failed: int=None, call_count_other: int=None, call_count_total: int=None, bandwidth: int=None, cache_hit_count: int=None, cache_miss_count: int=None, api_time_avg: float=None, api_time_min: float=None, api_time_max: float=None, service_time_avg: float=None, service_time_min: float=None, service_time_max: float=None, **kwargs) -> None:
        super(ReportRecordContract, self).__init__(**kwargs)
        self.name = name
        self.timestamp = timestamp
        self.interval = interval
        self.country = country
        self.region = region
        self.zip = zip
        self.user_id = None
        self.product_id = None
        self.api_id = api_id
        self.operation_id = operation_id
        self.api_region = api_region
        self.subscription_id = subscription_id
        self.call_count_success = call_count_success
        self.call_count_blocked = call_count_blocked
        self.call_count_failed = call_count_failed
        self.call_count_other = call_count_other
        self.call_count_total = call_count_total
        self.bandwidth = bandwidth
        self.cache_hit_count = cache_hit_count
        self.cache_miss_count = cache_miss_count
        self.api_time_avg = api_time_avg
        self.api_time_min = api_time_min
        self.api_time_max = api_time_max
        self.service_time_avg = service_time_avg
        self.service_time_min = service_time_min
        self.service_time_max = service_time_max


class RepresentationContract(Model):
    """Operation request/response representation details.

    All required parameters must be populated in order to send to Azure.

    :param content_type: Required. Specifies a registered or custom content
     type for this representation, e.g. application/xml.
    :type content_type: str
    :param sample: An example of the representation.
    :type sample: str
    :param schema_id: Schema identifier. Applicable only if 'contentType'
     value is neither 'application/x-www-form-urlencoded' nor
     'multipart/form-data'.
    :type schema_id: str
    :param type_name: Type name defined by the schema. Applicable only if
     'contentType' value is neither 'application/x-www-form-urlencoded' nor
     'multipart/form-data'.
    :type type_name: str
    :param form_parameters: Collection of form parameters. Required if
     'contentType' value is either 'application/x-www-form-urlencoded' or
     'multipart/form-data'..
    :type form_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    """

    _validation = {
        'content_type': {'required': True},
    }

    _attribute_map = {
        'content_type': {'key': 'contentType', 'type': 'str'},
        'sample': {'key': 'sample', 'type': 'str'},
        'schema_id': {'key': 'schemaId', 'type': 'str'},
        'type_name': {'key': 'typeName', 'type': 'str'},
        'form_parameters': {'key': 'formParameters', 'type': '[ParameterContract]'},
    }

    def __init__(self, *, content_type: str, sample: str=None, schema_id: str=None, type_name: str=None, form_parameters=None, **kwargs) -> None:
        super(RepresentationContract, self).__init__(**kwargs)
        self.content_type = content_type
        self.sample = sample
        self.schema_id = schema_id
        self.type_name = type_name
        self.form_parameters = form_parameters


class RequestContract(Model):
    """Operation request details.

    :param description: Operation request description.
    :type description: str
    :param query_parameters: Collection of operation request query parameters.
    :type query_parameters:
     list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param headers: Collection of operation request headers.
    :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract]
    :param representations: Collection of operation request representations.
    :type representations:
     list[~azure.mgmt.apimanagement.models.RepresentationContract]
    """

    _attribute_map = {
        'description': {'key': 'description', 'type': 'str'},
        'query_parameters': {'key': 'queryParameters', 'type': '[ParameterContract]'},
        'headers': {'key': 'headers', 'type': '[ParameterContract]'},
        'representations': {'key': 'representations', 'type': '[RepresentationContract]'},
    }

    def __init__(self, *, description: str=None, query_parameters=None, headers=None, representations=None, **kwargs) -> None:
        super(RequestContract, self).__init__(**kwargs)
        self.description = description
        self.query_parameters = query_parameters
        self.headers = headers
        self.representations = representations


class RequestReportRecordContract(Model):
    """Request Report data.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :param api_id: API identifier path. /apis/{apiId}
    :type api_id: str
    :param operation_id: Operation identifier path.
     /apis/{apiId}/operations/{operationId}
    :type operation_id: str
    :ivar product_id: Product identifier path. /products/{productId}
    :vartype product_id: str
    :ivar user_id: User identifier path. /users/{userId}
    :vartype user_id: str
    :param method: The HTTP method associated with this request..
    :type method: str
    :param url: The full URL associated with this request.
    :type url: str
    :param ip_address: The client IP address associated with this request.
    :type ip_address: str
    :param backend_response_code: The HTTP status code received by the gateway
     as a result of forwarding this request to the backend.
    :type backend_response_code: str
    :param response_code: The HTTP status code returned by the gateway.
    :type response_code: int
    :param response_size: The size of the response returned by the gateway.
    :type response_size: int
    :param timestamp: The date and time when this request was received by the
     gateway in ISO 8601 format.
    :type timestamp: datetime
    :param cache: Specifies if response cache was involved in generating the
     response. If the value is none, the cache was not used. If the value is
     hit, cached response was returned. If the value is miss, the cache was
     used but lookup resulted in a miss and request was fulfilled by the
     backend.
    :type cache: str
    :param api_time: The total time it took to process this request.
    :type api_time: float
    :param service_time: he time it took to forward this request to the
     backend and get the response back.
    :type service_time: float
    :param api_region: Azure region where the gateway that processed this
     request is located.
    :type api_region: str
    :param subscription_id: Subscription identifier path.
     /subscriptions/{subscriptionId}
    :type subscription_id: str
    :param request_id: Request Identifier.
    :type request_id: str
    :param request_size: The size of this request..
    :type request_size: int
    """

    _validation = {
        'product_id': {'readonly': True},
        'user_id': {'readonly': True},
    }

    _attribute_map = {
        'api_id': {'key': 'apiId', 'type': 'str'},
        'operation_id': {'key': 'operationId', 'type': 'str'},
        'product_id': {'key': 'productId', 'type': 'str'},
        'user_id': {'key': 'userId', 'type': 'str'},
        'method': {'key': 'method', 'type': 'str'},
        'url': {'key': 'url', 'type': 'str'},
        'ip_address': {'key': 'ipAddress', 'type': 'str'},
        'backend_response_code': {'key': 'backendResponseCode', 'type': 'str'},
        'response_code': {'key': 'responseCode', 'type': 'int'},
        'response_size': {'key': 'responseSize', 'type': 'int'},
        'timestamp': {'key': 'timestamp', 'type': 'iso-8601'},
        'cache': {'key': 'cache', 'type': 'str'},
        'api_time': {'key': 'apiTime', 'type': 'float'},
        'service_time': {'key': 'serviceTime', 'type': 'float'},
        'api_region': {'key': 'apiRegion', 'type': 'str'},
        'subscription_id': {'key': 'subscriptionId', 'type': 'str'},
        'request_id': {'key': 'requestId', 'type': 'str'},
        'request_size': {'key': 'requestSize', 'type': 'int'},
    }

    def __init__(self, *, api_id: str=None, operation_id: str=None, method: str=None, url: str=None, ip_address: str=None, backend_response_code: str=None, response_code: int=None, response_size: int=None, timestamp=None, cache: str=None, api_time: float=None, service_time: float=None, api_region: str=None, subscription_id: str=None, request_id: str=None, request_size: int=None, **kwargs) -> None:
        super(RequestReportRecordContract, self).__init__(**kwargs)
        self.api_id = api_id
        self.operation_id = operation_id
        self.product_id = None
        self.user_id = None
        self.method = method
        self.url = url
        self.ip_address = ip_address
        self.backend_response_code = backend_response_code
        self.response_code = response_code
        self.response_size = response_size
        self.timestamp = timestamp
        self.cache = cache
        self.api_time = api_time
        self.service_time = service_time
        self.api_region = api_region
        self.subscription_id = subscription_id
        self.request_id = request_id
        self.request_size = request_size


class ResourceLocationDataContract(Model):
    """Resource location data properties.

    All required parameters must be populated in order to send to Azure.

    :param name: Required. A canonical name for the geographic or physical
     location.
    :type name: str
    :param city: The city or locality where the resource is located.
    :type city: str
    :param district: The district, state, or province where the resource is
     located.
    :type district: str
    :param country_or_region: The country or region where the resource is
     located.
    :type country_or_region: str
    """

    _validation = {
        'name': {'required': True, 'max_length': 256},
        'city': {'max_length': 256},
        'district': {'max_length': 256},
        'country_or_region': {'max_length': 256},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'city': {'key': 'city', 'type': 'str'},
        'district': {'key': 'district', 'type': 'str'},
        'country_or_region': {'key': 'countryOrRegion', 'type': 'str'},
    }

    def __init__(self, *, name: str, city: str=None, district: str=None, country_or_region: str=None, **kwargs) -> None:
        super(ResourceLocationDataContract, self).__init__(**kwargs)
        self.name = name
        self.city = city
        self.district = district
        self.country_or_region = country_or_region


class ResourceSku(Model):
    """Describes an available API Management SKU.

    :param name: Name of the Sku. Possible values include: 'Developer',
     'Standard', 'Premium', 'Basic', 'Consumption'
    :type name: str or ~azure.mgmt.apimanagement.models.SkuType
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, name=None, **kwargs) -> None:
        super(ResourceSku, self).__init__(**kwargs)
        self.name = name


class ResourceSkuCapacity(Model):
    """Describes scaling information of a SKU.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar minimum: The minimum capacity.
    :vartype minimum: int
    :ivar maximum: The maximum capacity that can be set.
    :vartype maximum: int
    :ivar default: The default capacity.
    :vartype default: int
    :ivar scale_type: The scale type applicable to the sku. Possible values
     include: 'automatic', 'manual', 'none'
    :vartype scale_type: str or
     ~azure.mgmt.apimanagement.models.ResourceSkuCapacityScaleType
    """

    _validation = {
        'minimum': {'readonly': True},
        'maximum': {'readonly': True},
        'default': {'readonly': True},
        'scale_type': {'readonly': True},
    }

    _attribute_map = {
        'minimum': {'key': 'minimum', 'type': 'int'},
        'maximum': {'key': 'maximum', 'type': 'int'},
        'default': {'key': 'default', 'type': 'int'},
        'scale_type': {'key': 'scaleType', 'type': 'str'},
    }

    def __init__(self, **kwargs) -> None:
        super(ResourceSkuCapacity, self).__init__(**kwargs)
        self.minimum = None
        self.maximum = None
        self.default = None
        self.scale_type = None


class ResourceSkuResult(Model):
    """Describes an available API Management service SKU.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar resource_type: The type of resource the SKU applies to.
    :vartype resource_type: str
    :ivar sku: Specifies API Management SKU.
    :vartype sku: ~azure.mgmt.apimanagement.models.ResourceSku
    :ivar capacity: Specifies the number of API Management units.
    :vartype capacity: ~azure.mgmt.apimanagement.models.ResourceSkuCapacity
    """

    _validation = {
        'resource_type': {'readonly': True},
        'sku': {'readonly': True},
        'capacity': {'readonly': True},
    }

    _attribute_map = {
        'resource_type': {'key': 'resourceType', 'type': 'str'},
        'sku': {'key': 'sku', 'type': 'ResourceSku'},
        'capacity': {'key': 'capacity', 'type': 'ResourceSkuCapacity'},
    }

    def __init__(self, **kwargs) -> None:
        super(ResourceSkuResult, self).__init__(**kwargs)
        self.resource_type = None
        self.sku = None
        self.capacity = None


class ResponseContract(Model):
    """Operation response details.

    All required parameters must be populated in order to send to Azure.

    :param status_code: Required. Operation response HTTP status code.
    :type status_code: int
    :param description: Operation response description.
    :type description: str
    :param representations: Collection of operation response representations.
    :type representations:
     list[~azure.mgmt.apimanagement.models.RepresentationContract]
    :param headers: Collection of operation response headers.
    :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract]
    """

    _validation = {
        'status_code': {'required': True},
    }

    _attribute_map = {
        'status_code': {'key': 'statusCode', 'type': 'int'},
        'description': {'key': 'description', 'type': 'str'},
        'representations': {'key': 'representations', 'type': '[RepresentationContract]'},
        'headers': {'key': 'headers', 'type': '[ParameterContract]'},
    }

    def __init__(self, *, status_code: int, description: str=None, representations=None, headers=None, **kwargs) -> None:
        super(ResponseContract, self).__init__(**kwargs)
        self.status_code = status_code
        self.description = description
        self.representations = representations
        self.headers = headers


class SamplingSettings(Model):
    """Sampling settings for Diagnostic.

    :param sampling_type: Sampling type. Possible values include: 'fixed'
    :type sampling_type: str or ~azure.mgmt.apimanagement.models.SamplingType
    :param percentage: Rate of sampling for fixed-rate sampling.
    :type percentage: float
    """

    _validation = {
        'percentage': {'maximum': 100, 'minimum': 0},
    }

    _attribute_map = {
        'sampling_type': {'key': 'samplingType', 'type': 'str'},
        'percentage': {'key': 'percentage', 'type': 'float'},
    }

    def __init__(self, *, sampling_type=None, percentage: float=None, **kwargs) -> None:
        super(SamplingSettings, self).__init__(**kwargs)
        self.sampling_type = sampling_type
        self.percentage = percentage


class SaveConfigurationParameter(Model):
    """Save Tenant Configuration Contract details.

    All required parameters must be populated in order to send to Azure.

    :param branch: Required. The name of the Git branch in which to commit the
     current configuration snapshot.
    :type branch: str
    :param force: The value if true, the current configuration database is
     committed to the Git repository, even if the Git repository has newer
     changes that would be overwritten.
    :type force: bool
    """

    _validation = {
        'branch': {'required': True},
    }

    _attribute_map = {
        'branch': {'key': 'properties.branch', 'type': 'str'},
        'force': {'key': 'properties.force', 'type': 'bool'},
    }

    def __init__(self, *, branch: str, force: bool=None, **kwargs) -> None:
        super(SaveConfigurationParameter, self).__init__(**kwargs)
        self.branch = branch
        self.force = force


class SchemaContract(Resource):
    """Schema Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param content_type: Required. Must be a valid a media type used in a
     Content-Type header as defined in the RFC 2616. Media type of the schema
     document (e.g. application/json, application/xml). </br> - `Swagger`
     Schema use `application/vnd.ms-azure-apim.swagger.definitions+json` </br>
     - `WSDL` Schema use `application/vnd.ms-azure-apim.xsd+xml` </br> -
     `OpenApi` Schema use `application/vnd.oai.openapi.components+json` </br> -
     `WADL Schema` use `application/vnd.ms-azure-apim.wadl.grammars+xml`.
    :type content_type: str
    :param value: Json escaped string defining the document representing the
     Schema. Used for schemas other than Swagger/OpenAPI.
    :type value: str
    :param definitions: Types definitions. Used for Swagger/OpenAPI schemas
     only, null otherwise.
    :type definitions: object
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'content_type': {'required': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'content_type': {'key': 'properties.contentType', 'type': 'str'},
        'value': {'key': 'properties.document.value', 'type': 'str'},
        'definitions': {'key': 'properties.document.definitions', 'type': 'object'},
    }

    def __init__(self, *, content_type: str, value: str=None, definitions=None, **kwargs) -> None:
        super(SchemaContract, self).__init__(**kwargs)
        self.content_type = content_type
        self.value = value
        self.definitions = definitions


class SubscriptionContract(Resource):
    """Subscription details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param owner_id: The user resource identifier of the subscription owner.
     The value is a valid relative URL in the format of /users/{userId} where
     {userId} is a user identifier.
    :type owner_id: str
    :param scope: Required. Scope like /products/{productId} or /apis or
     /apis/{apiId}.
    :type scope: str
    :param display_name: The name of the subscription, or null if the
     subscription has no name.
    :type display_name: str
    :param state: Required. Subscription state. Possible states are * active –
     the subscription is active, * suspended – the subscription is blocked, and
     the subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :ivar created_date: Subscription creation date. The date conforms to the
     following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :vartype created_date: datetime
    :param start_date: Subscription activation date. The setting is for audit
     purposes only and the subscription is not automatically activated. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type start_date: datetime
    :param expiration_date: Subscription expiration date. The setting is for
     audit purposes only and the subscription is not automatically expired. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    :param end_date: Date when subscription was cancelled or expired. The
     setting is for audit purposes only and the subscription is not
     automatically cancelled. The subscription lifecycle can be managed by
     using the `state` property. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type end_date: datetime
    :param notification_date: Upcoming subscription expiration notification
     date. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as
     specified by the ISO 8601 standard.
    :type notification_date: datetime
    :param primary_key: Subscription primary key. This property will not be
     filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type primary_key: str
    :param secondary_key: Subscription secondary key. This property will not
     be filled on 'GET' operations! Use '/listSecrets' POST request to get the
     value.
    :type secondary_key: str
    :param state_comment: Optional subscription comment added by an
     administrator.
    :type state_comment: str
    :param allow_tracing: Determines whether tracing is enabled
    :type allow_tracing: bool
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'scope': {'required': True},
        'display_name': {'max_length': 100, 'min_length': 0},
        'state': {'required': True},
        'created_date': {'readonly': True},
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'created_date': {'key': 'properties.createdDate', 'type': 'iso-8601'},
        'start_date': {'key': 'properties.startDate', 'type': 'iso-8601'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
        'end_date': {'key': 'properties.endDate', 'type': 'iso-8601'},
        'notification_date': {'key': 'properties.notificationDate', 'type': 'iso-8601'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state_comment': {'key': 'properties.stateComment', 'type': 'str'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, scope: str, state, owner_id: str=None, display_name: str=None, start_date=None, expiration_date=None, end_date=None, notification_date=None, primary_key: str=None, secondary_key: str=None, state_comment: str=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionContract, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.display_name = display_name
        self.state = state
        self.created_date = None
        self.start_date = start_date
        self.expiration_date = expiration_date
        self.end_date = end_date
        self.notification_date = notification_date
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state_comment = state_comment
        self.allow_tracing = allow_tracing


class SubscriptionCreateParameters(Model):
    """Subscription create details.

    All required parameters must be populated in order to send to Azure.

    :param owner_id: User (user id path) for whom subscription is being
     created in form /users/{userId}
    :type owner_id: str
    :param scope: Required. Scope like /products/{productId} or /apis or
     /apis/{apiId}.
    :type scope: str
    :param display_name: Required. Subscription name.
    :type display_name: str
    :param primary_key: Primary subscription key. If not specified during
     request key will be generated automatically.
    :type primary_key: str
    :param secondary_key: Secondary subscription key. If not specified during
     request key will be generated automatically.
    :type secondary_key: str
    :param state: Initial subscription state. If no value is specified,
     subscription is created with Submitted state. Possible states are * active
     – the subscription is active, * suspended – the subscription is blocked,
     and the subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :param allow_tracing: Determines whether tracing can be enabled
    :type allow_tracing: bool
    """

    _validation = {
        'scope': {'required': True},
        'display_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, scope: str, display_name: str, owner_id: str=None, primary_key: str=None, secondary_key: str=None, state=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionCreateParameters, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.display_name = display_name
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state = state
        self.allow_tracing = allow_tracing


class SubscriptionKeyParameterNamesContract(Model):
    """Subscription key parameter names details.

    :param header: Subscription key header name.
    :type header: str
    :param query: Subscription key query string parameter name.
    :type query: str
    """

    _attribute_map = {
        'header': {'key': 'header', 'type': 'str'},
        'query': {'key': 'query', 'type': 'str'},
    }

    def __init__(self, *, header: str=None, query: str=None, **kwargs) -> None:
        super(SubscriptionKeyParameterNamesContract, self).__init__(**kwargs)
        self.header = header
        self.query = query


class SubscriptionKeysContract(Model):
    """Subscription keys.

    :param primary_key: Subscription primary key.
    :type primary_key: str
    :param secondary_key: Subscription secondary key.
    :type secondary_key: str
    """

    _validation = {
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'primary_key': {'key': 'primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'secondaryKey', 'type': 'str'},
    }

    def __init__(self, *, primary_key: str=None, secondary_key: str=None, **kwargs) -> None:
        super(SubscriptionKeysContract, self).__init__(**kwargs)
        self.primary_key = primary_key
        self.secondary_key = secondary_key


class SubscriptionsDelegationSettingsProperties(Model):
    """Subscriptions delegation settings properties.

    :param enabled: Enable or disable delegation for subscriptions.
    :type enabled: bool
    """

    _attribute_map = {
        'enabled': {'key': 'enabled', 'type': 'bool'},
    }

    def __init__(self, *, enabled: bool=None, **kwargs) -> None:
        super(SubscriptionsDelegationSettingsProperties, self).__init__(**kwargs)
        self.enabled = enabled


class SubscriptionUpdateParameters(Model):
    """Subscription update details.

    :param owner_id: User identifier path: /users/{userId}
    :type owner_id: str
    :param scope: Scope like /products/{productId} or /apis or /apis/{apiId}
    :type scope: str
    :param expiration_date: Subscription expiration date. The setting is for
     audit purposes only and the subscription is not automatically expired. The
     subscription lifecycle can be managed by using the `state` property. The
     date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified
     by the ISO 8601 standard.
    :type expiration_date: datetime
    :param display_name: Subscription name.
    :type display_name: str
    :param primary_key: Primary subscription key.
    :type primary_key: str
    :param secondary_key: Secondary subscription key.
    :type secondary_key: str
    :param state: Subscription state. Possible states are * active – the
     subscription is active, * suspended – the subscription is blocked, and the
     subscriber cannot call any APIs of the product, * submitted – the
     subscription request has been made by the developer, but has not yet been
     approved or rejected, * rejected – the subscription request has been
     denied by an administrator, * cancelled – the subscription has been
     cancelled by the developer or administrator, * expired – the subscription
     reached its expiration date and was deactivated. Possible values include:
     'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'
    :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState
    :param state_comment: Comments describing subscription state change by the
     administrator.
    :type state_comment: str
    :param allow_tracing: Determines whether tracing can be enabled
    :type allow_tracing: bool
    """

    _validation = {
        'primary_key': {'max_length': 256, 'min_length': 1},
        'secondary_key': {'max_length': 256, 'min_length': 1},
    }

    _attribute_map = {
        'owner_id': {'key': 'properties.ownerId', 'type': 'str'},
        'scope': {'key': 'properties.scope', 'type': 'str'},
        'expiration_date': {'key': 'properties.expirationDate', 'type': 'iso-8601'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
        'primary_key': {'key': 'properties.primaryKey', 'type': 'str'},
        'secondary_key': {'key': 'properties.secondaryKey', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'SubscriptionState'},
        'state_comment': {'key': 'properties.stateComment', 'type': 'str'},
        'allow_tracing': {'key': 'properties.allowTracing', 'type': 'bool'},
    }

    def __init__(self, *, owner_id: str=None, scope: str=None, expiration_date=None, display_name: str=None, primary_key: str=None, secondary_key: str=None, state=None, state_comment: str=None, allow_tracing: bool=None, **kwargs) -> None:
        super(SubscriptionUpdateParameters, self).__init__(**kwargs)
        self.owner_id = owner_id
        self.scope = scope
        self.expiration_date = expiration_date
        self.display_name = display_name
        self.primary_key = primary_key
        self.secondary_key = secondary_key
        self.state = state
        self.state_comment = state_comment
        self.allow_tracing = allow_tracing


class TagContract(Resource):
    """Tag Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param display_name: Required. Tag name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'display_name': {'required': True, 'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, **kwargs) -> None:
        super(TagContract, self).__init__(**kwargs)
        self.display_name = display_name


class TagCreateUpdateParameters(Model):
    """Parameters supplied to Create/Update Tag operations.

    All required parameters must be populated in order to send to Azure.

    :param display_name: Required. Tag name.
    :type display_name: str
    """

    _validation = {
        'display_name': {'required': True, 'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, display_name: str, **kwargs) -> None:
        super(TagCreateUpdateParameters, self).__init__(**kwargs)
        self.display_name = display_name


class TagDescriptionContract(Resource):
    """Contract details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param description: Description of the Tag.
    :type description: str
    :param external_docs_url: Absolute URL of external resources describing
     the tag.
    :type external_docs_url: str
    :param external_docs_description: Description of the external resources
     describing the tag.
    :type external_docs_description: str
    :param tag_id: Identifier of the tag in the form of /tags/{tagId}
    :type tag_id: str
    :param display_name: Tag name.
    :type display_name: str
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'external_docs_url': {'max_length': 2000},
        'display_name': {'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'description': {'key': 'properties.description', 'type': 'str'},
        'external_docs_url': {'key': 'properties.externalDocsUrl', 'type': 'str'},
        'external_docs_description': {'key': 'properties.externalDocsDescription', 'type': 'str'},
        'tag_id': {'key': 'properties.tagId', 'type': 'str'},
        'display_name': {'key': 'properties.displayName', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, external_docs_url: str=None, external_docs_description: str=None, tag_id: str=None, display_name: str=None, **kwargs) -> None:
        super(TagDescriptionContract, self).__init__(**kwargs)
        self.description = description
        self.external_docs_url = external_docs_url
        self.external_docs_description = external_docs_description
        self.tag_id = tag_id
        self.display_name = display_name


class TagDescriptionCreateParameters(Model):
    """Parameters supplied to the Create TagDescription operation.

    :param description: Description of the Tag.
    :type description: str
    :param external_docs_url: Absolute URL of external resources describing
     the tag.
    :type external_docs_url: str
    :param external_docs_description: Description of the external resources
     describing the tag.
    :type external_docs_description: str
    """

    _validation = {
        'external_docs_url': {'max_length': 2000},
    }

    _attribute_map = {
        'description': {'key': 'properties.description', 'type': 'str'},
        'external_docs_url': {'key': 'properties.externalDocsUrl', 'type': 'str'},
        'external_docs_description': {'key': 'properties.externalDocsDescription', 'type': 'str'},
    }

    def __init__(self, *, description: str=None, external_docs_url: str=None, external_docs_description: str=None, **kwargs) -> None:
        super(TagDescriptionCreateParameters, self).__init__(**kwargs)
        self.description = description
        self.external_docs_url = external_docs_url
        self.external_docs_description = external_docs_description


class TagResourceContract(Model):
    """TagResource contract properties.

    All required parameters must be populated in order to send to Azure.

    :param tag: Required. Tag associated with the resource.
    :type tag:
     ~azure.mgmt.apimanagement.models.TagTagResourceContractProperties
    :param api: Api associated with the tag.
    :type api:
     ~azure.mgmt.apimanagement.models.ApiTagResourceContractProperties
    :param operation: Operation associated with the tag.
    :type operation:
     ~azure.mgmt.apimanagement.models.OperationTagResourceContractProperties
    :param product: Product associated with the tag.
    :type product:
     ~azure.mgmt.apimanagement.models.ProductTagResourceContractProperties
    """

    _validation = {
        'tag': {'required': True},
    }

    _attribute_map = {
        'tag': {'key': 'tag', 'type': 'TagTagResourceContractProperties'},
        'api': {'key': 'api', 'type': 'ApiTagResourceContractProperties'},
        'operation': {'key': 'operation', 'type': 'OperationTagResourceContractProperties'},
        'product': {'key': 'product', 'type': 'ProductTagResourceContractProperties'},
    }

    def __init__(self, *, tag, api=None, operation=None, product=None, **kwargs) -> None:
        super(TagResourceContract, self).__init__(**kwargs)
        self.tag = tag
        self.api = api
        self.operation = operation
        self.product = product


class TagTagResourceContractProperties(Model):
    """Contract defining the Tag property in the Tag Resource Contract.

    :param id: Tag identifier
    :type id: str
    :param name: Tag Name
    :type name: str
    """

    _validation = {
        'name': {'max_length': 160, 'min_length': 1},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
    }

    def __init__(self, *, id: str=None, name: str=None, **kwargs) -> None:
        super(TagTagResourceContractProperties, self).__init__(**kwargs)
        self.id = id
        self.name = name


class TenantConfigurationSyncStateContract(Model):
    """Tenant Configuration Synchronization State.

    :param branch: The name of Git branch.
    :type branch: str
    :param commit_id: The latest commit Id.
    :type commit_id: str
    :param is_export: value indicating if last sync was save (true) or deploy
     (false) operation.
    :type is_export: bool
    :param is_synced: value indicating if last synchronization was later than
     the configuration change.
    :type is_synced: bool
    :param is_git_enabled: value indicating whether Git configuration access
     is enabled.
    :type is_git_enabled: bool
    :param sync_date: The date of the latest synchronization. The date
     conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by
     the ISO 8601 standard.
    :type sync_date: datetime
    :param configuration_change_date: The date of the latest configuration
     change. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`
     as specified by the ISO 8601 standard.
    :type configuration_change_date: datetime
    """

    _attribute_map = {
        'branch': {'key': 'branch', 'type': 'str'},
        'commit_id': {'key': 'commitId', 'type': 'str'},
        'is_export': {'key': 'isExport', 'type': 'bool'},
        'is_synced': {'key': 'isSynced', 'type': 'bool'},
        'is_git_enabled': {'key': 'isGitEnabled', 'type': 'bool'},
        'sync_date': {'key': 'syncDate', 'type': 'iso-8601'},
        'configuration_change_date': {'key': 'configurationChangeDate', 'type': 'iso-8601'},
    }

    def __init__(self, *, branch: str=None, commit_id: str=None, is_export: bool=None, is_synced: bool=None, is_git_enabled: bool=None, sync_date=None, configuration_change_date=None, **kwargs) -> None:
        super(TenantConfigurationSyncStateContract, self).__init__(**kwargs)
        self.branch = branch
        self.commit_id = commit_id
        self.is_export = is_export
        self.is_synced = is_synced
        self.is_git_enabled = is_git_enabled
        self.sync_date = sync_date
        self.configuration_change_date = configuration_change_date


class TermsOfServiceProperties(Model):
    """Terms of service contract properties.

    :param text: A terms of service text.
    :type text: str
    :param enabled: Display terms of service during a sign-up process.
    :type enabled: bool
    :param consent_required: Ask user for consent to the terms of service.
    :type consent_required: bool
    """

    _attribute_map = {
        'text': {'key': 'text', 'type': 'str'},
        'enabled': {'key': 'enabled', 'type': 'bool'},
        'consent_required': {'key': 'consentRequired', 'type': 'bool'},
    }

    def __init__(self, *, text: str=None, enabled: bool=None, consent_required: bool=None, **kwargs) -> None:
        super(TermsOfServiceProperties, self).__init__(**kwargs)
        self.text = text
        self.enabled = enabled
        self.consent_required = consent_required


class TokenBodyParameterContract(Model):
    """OAuth acquire token request body parameter (www-url-form-encoded).

    All required parameters must be populated in order to send to Azure.

    :param name: Required. body parameter name.
    :type name: str
    :param value: Required. body parameter value.
    :type value: str
    """

    _validation = {
        'name': {'required': True},
        'value': {'required': True},
    }

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, name: str, value: str, **kwargs) -> None:
        super(TokenBodyParameterContract, self).__init__(**kwargs)
        self.name = name
        self.value = value


class UserContract(Resource):
    """User details.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar name: Resource name.
    :vartype name: str
    :ivar type: Resource type for API Management resource.
    :vartype type: str
    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param first_name: First name.
    :type first_name: str
    :param last_name: Last name.
    :type last_name: str
    :param email: Email address.
    :type email: str
    :param registration_date: Date of user registration. The date conforms to
     the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601
     standard.
    :type registration_date: datetime
    :ivar groups: Collection of groups user is part of.
    :vartype groups:
     list[~azure.mgmt.apimanagement.models.GroupContractProperties]
    """

    _validation = {
        'id': {'readonly': True},
        'name': {'readonly': True},
        'type': {'readonly': True},
        'groups': {'readonly': True},
    }

    _attribute_map = {
        'id': {'key': 'id', 'type': 'str'},
        'name': {'key': 'name', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'registration_date': {'key': 'properties.registrationDate', 'type': 'iso-8601'},
        'groups': {'key': 'properties.groups', 'type': '[GroupContractProperties]'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, first_name: str=None, last_name: str=None, email: str=None, registration_date=None, **kwargs) -> None:
        super(UserContract, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.registration_date = registration_date
        self.groups = None


class UserCreateParameters(Model):
    """User create details.

    All required parameters must be populated in order to send to Azure.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param email: Required. Email address. Must not be empty and must be
     unique within the service instance.
    :type email: str
    :param first_name: Required. First name.
    :type first_name: str
    :param last_name: Required. Last name.
    :type last_name: str
    :param password: <PASSWORD>. If no value is provided, a default
     password is generated.
    :type password: str
    :param app_type: Determines the type of application which send the create
     user request. Default is old publisher portal. Possible values include:
     'developerPortal'
    :type app_type: str or ~azure.mgmt.apimanagement.models.AppType
    :param confirmation: Determines the type of confirmation e-mail that will
     be sent to the newly created user. Possible values include: 'signup',
     'invite'
    :type confirmation: str or ~azure.mgmt.apimanagement.models.Confirmation
    """

    _validation = {
        'email': {'required': True, 'max_length': 254, 'min_length': 1},
        'first_name': {'required': True, 'max_length': 100, 'min_length': 1},
        'last_name': {'required': True, 'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
        'app_type': {'key': 'properties.appType', 'type': 'str'},
        'confirmation': {'key': 'properties.confirmation', 'type': 'str'},
    }

    def __init__(self, *, email: str, first_name: str, last_name: str, state="active", note: str=None, identities=None, password: str=None, app_type=None, confirmation=None, **kwargs) -> None:
        super(UserCreateParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.email = email
        self.first_name = first_name
        self.last_name = last_name
        self.password = password
        self.app_type = app_type
        self.confirmation = confirmation


class UserEntityBaseParameters(Model):
    """User Entity Base Parameters set.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    """

    _attribute_map = {
        'state': {'key': 'state', 'type': 'str'},
        'note': {'key': 'note', 'type': 'str'},
        'identities': {'key': 'identities', 'type': '[UserIdentityContract]'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, **kwargs) -> None:
        super(UserEntityBaseParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities


class UserIdentityContract(Model):
    """User identity details.

    :param provider: Identity provider name.
    :type provider: str
    :param id: Identifier value within provider.
    :type id: str
    """

    _attribute_map = {
        'provider': {'key': 'provider', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
    }

    def __init__(self, *, provider: str=None, id: str=None, **kwargs) -> None:
        super(UserIdentityContract, self).__init__(**kwargs)
        self.provider = provider
        self.id = id


class UserIdentityProperties(Model):
    """UserIdentityProperties.

    :param principal_id: The principal id of user assigned identity.
    :type principal_id: str
    :param client_id: The client id of user assigned identity.
    :type client_id: str
    """

    _attribute_map = {
        'principal_id': {'key': 'principalId', 'type': 'str'},
        'client_id': {'key': 'clientId', 'type': 'str'},
    }

    def __init__(self, *, principal_id: str=None, client_id: str=None, **kwargs) -> None:
        super(UserIdentityProperties, self).__init__(**kwargs)
        self.principal_id = principal_id
        self.client_id = client_id


class UserTokenParameters(Model):
    """Get User Token parameters.

    All required parameters must be populated in order to send to Azure.

    :param key_type: Required. The Key to be used to generate token for user.
     Possible values include: 'primary', 'secondary'. Default value: "primary"
     .
    :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType
    :param expiry: Required. The Expiry time of the Token. Maximum token
     expiry time is set to 30 days. The date conforms to the following format:
     `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.
    :type expiry: datetime
    """

    _validation = {
        'key_type': {'required': True},
        'expiry': {'required': True},
    }

    _attribute_map = {
        'key_type': {'key': 'properties.keyType', 'type': 'KeyType'},
        'expiry': {'key': 'properties.expiry', 'type': 'iso-8601'},
    }

    def __init__(self, *, expiry, key_type="primary", **kwargs) -> None:
        super(UserTokenParameters, self).__init__(**kwargs)
        self.key_type = key_type
        self.expiry = expiry


class UserTokenResult(Model):
    """Get User Token response details.

    :param value: Shared Access Authorization token for the User.
    :type value: str
    """

    _attribute_map = {
        'value': {'key': 'value', 'type': 'str'},
    }

    def __init__(self, *, value: str=None, **kwargs) -> None:
        super(UserTokenResult, self).__init__(**kwargs)
        self.value = value


class UserUpdateParameters(Model):
    """User update parameters.

    :param state: Account state. Specifies whether the user is active or not.
     Blocked users are unable to sign into the developer portal or call any
     APIs of subscribed products. Default state is Active. Possible values
     include: 'active', 'blocked', 'pending', 'deleted'. Default value:
     "active" .
    :type state: str or ~azure.mgmt.apimanagement.models.UserState
    :param note: Optional note about a user set by the administrator.
    :type note: str
    :param identities: Collection of user identities.
    :type identities:
     list[~azure.mgmt.apimanagement.models.UserIdentityContract]
    :param email: Email address. Must not be empty and must be unique within
     the service instance.
    :type email: str
    :param password: <PASSWORD>.
    :type password: str
    :param first_name: First name.
    :type first_name: str
    :param last_name: Last name.
    :type last_name: str
    """

    _validation = {
        'email': {'max_length': 254, 'min_length': 1},
        'first_name': {'max_length': 100, 'min_length': 1},
        'last_name': {'max_length': 100, 'min_length': 1},
    }

    _attribute_map = {
        'state': {'key': 'properties.state', 'type': 'str'},
        'note': {'key': 'properties.note', 'type': 'str'},
        'identities': {'key': 'properties.identities', 'type': '[UserIdentityContract]'},
        'email': {'key': 'properties.email', 'type': 'str'},
        'password': {'key': 'properties.password', 'type': 'str'},
        'first_name': {'key': 'properties.firstName', 'type': 'str'},
        'last_name': {'key': 'properties.lastName', 'type': 'str'},
    }

    def __init__(self, *, state="active", note: str=None, identities=None, email: str=None, password: str=None, first_name: str=None, last_name: str=None, **kwargs) -> None:
        super(UserUpdateParameters, self).__init__(**kwargs)
        self.state = state
        self.note = note
        self.identities = identities
        self.email = email
        self.password = password
        self.first_name = first_name
        self.last_name = last_name


class VirtualNetworkConfiguration(Model):
    """Configuration of a virtual network to which API Management service is
    deployed.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    :ivar vnetid: The virtual network ID. This is typically a GUID. Expect a
     null GUID by default.
    :vartype vnetid: str
    :ivar subnetname: The name of the subnet.
    :vartype subnetname: str
    :param subnet_resource_id: The full resource ID of a subnet in a virtual
     network to deploy the API Management service in.
    :type subnet_resource_id: str
    """

    _validation = {
        'vnetid': {'readonly': True},
        'subnetname': {'readonly': True},
        'subnet_resource_id': {'pattern': r'^/subscriptions/[^/]*/resourceGroups/[^/]*/providers/Microsoft.(ClassicNetwork|Network)/virtualNetworks/[^/]*/subnets/[^/]*$'},
    }

    _attribute_map = {
        'vnetid': {'key': 'vnetid', 'type': 'str'},
        'subnetname': {'key': 'subnetname', 'type': 'str'},
        'subnet_resource_id': {'key': 'subnetResourceId', 'type': 'str'},
    }

    def __init__(self, *, subnet_resource_id: str=None, **kwargs) -> None:
        super(VirtualNetworkConfiguration, self).__init__(**kwargs)
        self.vnetid = None
        self.subnetname = None
        self.subnet_resource_id = subnet_resource_id


class X509CertificateName(Model):
    """Properties of server X509Names.

    :param name: Common Name of the Certificate.
    :type name: str
    :param issuer_certificate_thumbprint: Thumbprint for the Issuer of the
     Certificate.
    :type issuer_certificate_thumbprint: str
    """

    _attribute_map = {
        'name': {'key': 'name', 'type': 'str'},
        'issuer_certificate_thumbprint': {'key': 'issuerCertificateThumbprint', 'type': 'str'},
    }

    def __init__(self, *, name: str=None, issuer_certificate_thumbprint: str=None, **kwargs) -> None:
        super(X509CertificateName, self).__init__(**kwargs)
        self.name = name
        self.issuer_certificate_thumbprint = issuer_certificate_thumbprint

# coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for # license information. # # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- Tenant access information contract of the API Management service.      :param id: Identifier.     :type id: str     :param primary_key: Primary access key. This property will not be filled      on 'GET' operations! Use '/listSecrets' POST request to get the value.     :type primary_key: str     :param secondary_key: Secondary access key. This property will not be      filled on 'GET' operations! Use '/listSecrets' POST request to get the      value.     :type secondary_key: str     :param enabled: Determines whether direct access is enabled.     :type enabled: bool Tenant access information update parameters.      :param enabled: Determines whether direct access is enabled.     :type enabled: bool Description of an additional API Management resource location.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :param location: Required. The location name of the additional region      among Azure Data center regions.     :type location: str     :param sku: Required. SKU properties of the API Management service.     :type sku:      ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties     :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the      API Management service in the additional location. Available only for      Basic, Standard and Premium SKU.     :vartype public_ip_addresses: list[str]     :ivar private_ip_addresses: Private Static Load Balanced IP addresses of      the API Management service which is deployed in an Internal Virtual      Network in a particular additional location. Available only for Basic,      Standard and Premium SKU.     :vartype private_ip_addresses: list[str]     :param virtual_network_configuration: Virtual network configuration for      the location.     :type virtual_network_configuration:      ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration     :ivar gateway_regional_url: Gateway URL of the API Management service in      the Region.     :vartype gateway_regional_url: str     :param disable_gateway: Property only valid for an Api Management service      deployed in multiple locations. This can be used to disable the gateway in      this additional location. Default value: False .     :type disable_gateway: bool The Resource definition.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str Api details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool     :param source_api_id: API identifier of the source API.     :type source_api_id: str     :param display_name: API name. Must be 1 to 300 characters long.     :type display_name: str     :param service_url: Absolute URL of the backend service implementing this      API. Cannot be more than 2000 characters long.     :type service_url: str     :param path: Required. Relative URL uniquely identifying this API and all      of its resource paths within the API Management service instance. It is      appended to the API endpoint base URL specified during the service      instance creation to form a public URL for this API.     :type path: str     :param protocols: Describes on which protocols the operations in this API      can be invoked.     :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]     :param api_version_set: Version set details     :type api_version_set:      ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails API base contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool Api Entity Properties.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool     :param source_api_id: API identifier of the source API.     :type source_api_id: str     :param display_name: API name. Must be 1 to 300 characters long.     :type display_name: str     :param service_url: Absolute URL of the backend service implementing this      API. Cannot be more than 2000 characters long.     :type service_url: str     :param path: Required. Relative URL uniquely identifying this API and all      of its resource paths within the API Management service instance. It is      appended to the API endpoint base URL specified during the service      instance creation to form a public URL for this API.     :type path: str     :param protocols: Describes on which protocols the operations in this API      can be invoked.     :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]     :param api_version_set: Version set details     :type api_version_set:      ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails API Create or Update Parameters.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool     :param source_api_id: API identifier of the source API.     :type source_api_id: str     :param display_name: API name. Must be 1 to 300 characters long.     :type display_name: str     :param service_url: Absolute URL of the backend service implementing this      API. Cannot be more than 2000 characters long.     :type service_url: str     :param path: Required. Relative URL uniquely identifying this API and all      of its resource paths within the API Management service instance. It is      appended to the API endpoint base URL specified during the service      instance creation to form a public URL for this API.     :type path: str     :param protocols: Describes on which protocols the operations in this API      can be invoked.     :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol]     :param api_version_set: Version set details     :type api_version_set:      ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails     :param value: Content value when Importing an API.     :type value: str     :param format: Format of the Content in which the API is getting imported.      Possible values include: 'wadl-xml', 'wadl-link-json', 'swagger-json',      'swagger-link-json', 'wsdl', 'wsdl-link', 'openapi', 'openapi+json',      'openapi-link', 'openapi+json-link'     :type format: str or ~azure.mgmt.apimanagement.models.ContentFormat     :param wsdl_selector: Criteria to limit import of WSDL to a subset of the      document.     :type wsdl_selector:      ~azure.mgmt.apimanagement.models.ApiCreateOrUpdatePropertiesWsdlSelector     :param soap_api_type: Type of Api to create.      * `http` creates a SOAP to REST API      * `soap` creates a SOAP pass-through API. Possible values include:      'SoapToRest', 'SoapPassThrough'     :type soap_api_type: str or ~azure.mgmt.apimanagement.models.SoapApiType Criteria to limit import of WSDL to a subset of the document.      :param wsdl_service_name: Name of service to import from WSDL     :type wsdl_service_name: str     :param wsdl_endpoint_name: Name of endpoint(port) to import from WSDL     :type wsdl_endpoint_name: str API Export result.      :param id: ResourceId of the API which was exported.     :type id: str     :param export_result_format: Format in which the Api Details are exported      to the Storage Blob with Sas Key valid for 5 minutes. Possible values      include: 'Swagger', 'Wsdl', 'Wadl', 'OpenApi'     :type export_result_format: str or      ~azure.mgmt.apimanagement.models.ExportResultFormat     :param value: The object defining the schema of the exported Api Detail     :type value: ~azure.mgmt.apimanagement.models.ApiExportResultValue The object defining the schema of the exported Api Detail.      :param link: Link to the Storage Blob containing the result of the export      operation. The Blob Uri is only valid for 5 minutes.     :type link: str Parameter supplied to the Apply Network configuration operation.      :param location: Location of the Api Management service to update for a      multi-region service. For a service deployed in a single region, this      parameter is not required.     :type location: str Parameters supplied to the Backup/Restore of an API Management service     operation.      All required parameters must be populated in order to send to Azure.      :param storage_account: Required. Azure Cloud Storage account (used to      place/retrieve the backup) name.     :type storage_account: str     :param access_key: Required. Azure Cloud Storage account (used to      place/retrieve the backup) access key.     :type access_key: str     :param container_name: Required. Azure Cloud Storage blob container name      used to place/retrieve the backup.     :type container_name: str     :param backup_name: Required. The name of the backup file to create.     :type backup_name: str Base Properties of an API Management service resource description.      Variables are only populated by the server, and will be ignored when     sending a request.      :param notification_sender_email: Email address from which the      notification will be sent.     :type notification_sender_email: str     :ivar provisioning_state: The current provisioning state of the API      Management service which can be one of the following:      Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.     :vartype provisioning_state: str     :ivar target_provisioning_state: The provisioning state of the API      Management service, which is targeted by the long running operation      started on the service.     :vartype target_provisioning_state: str     :ivar created_at_utc: Creation UTC date of the API Management service.The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :vartype created_at_utc: datetime     :ivar gateway_url: Gateway URL of the API Management service.     :vartype gateway_url: str     :ivar gateway_regional_url: Gateway URL of the API Management service in      the Default Region.     :vartype gateway_regional_url: str     :ivar portal_url: Publisher portal endpoint Url of the API Management      service.     :vartype portal_url: str     :ivar management_api_url: Management API endpoint URL of the API      Management service.     :vartype management_api_url: str     :ivar scm_url: SCM endpoint URL of the API Management service.     :vartype scm_url: str     :ivar developer_portal_url: DEveloper Portal endpoint URL of the API      Management service.     :vartype developer_portal_url: str     :param hostname_configurations: Custom hostname configuration of the API      Management service.     :type hostname_configurations:      list[~azure.mgmt.apimanagement.models.HostnameConfiguration]     :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the      API Management service in Primary region. Available only for Basic,      Standard and Premium SKU.     :vartype public_ip_addresses: list[str]     :ivar private_ip_addresses: Private Static Load Balanced IP addresses of      the API Management service in Primary region which is deployed in an      Internal Virtual Network. Available only for Basic, Standard and Premium      SKU.     :vartype private_ip_addresses: list[str]     :param virtual_network_configuration: Virtual network configuration of the      API Management service.     :type virtual_network_configuration:      ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration     :param additional_locations: Additional datacenter locations of the API      Management service.     :type additional_locations:      list[~azure.mgmt.apimanagement.models.AdditionalLocation]     :param custom_properties: Custom properties of the API Management      service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`      will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1      and 1.2).</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`      can be used to disable just TLS 1.1.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`      can be used to disable TLS 1.0 on an API Management service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`      can be used to disable just TLS 1.1 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`      can be used to disable TLS 1.0 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can      be used to enable HTTP2 protocol on an API Management service.</br>Not      specifying any of these properties on PATCH operation will reset omitted      properties' values to their defaults. For all the settings except Http2      the default value is `True` if the service was created on or before April      1st 2018 and `False` otherwise. Http2 setting's default value is      `False`.</br></br>You can disable any of next ciphers by using settings      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.      The default value is `true` for them.  Note: next ciphers can't be      disabled since they are required by Azure CloudService internal      components:      TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384     :type custom_properties: dict[str, str]     :param certificates: List of Certificates that need to be installed in the      API Management service. Max supported certificates that can be installed      is 10.     :type certificates:      list[~azure.mgmt.apimanagement.models.CertificateConfiguration]     :param enable_client_certificate: Property only meant to be used for      Consumption SKU Service. This enforces a client certificate to be      presented on each request to the gateway. This also enables the ability to      authenticate the certificate in the policy on the gateway. Default value:      False .     :type enable_client_certificate: bool     :param disable_gateway: Property only valid for an Api Management service      deployed in multiple locations. This can be used to disable the gateway in      master region. Default value: False .     :type disable_gateway: bool     :param virtual_network_type: The type of VPN in which API Management      service needs to be configured in. None (Default Value) means the API      Management service is not part of any Virtual Network, External means the      API Management deployment is set up inside a Virtual Network having an      Internet Facing Endpoint, and Internal means that API Management      deployment is setup inside a Virtual Network having an Intranet Facing      Endpoint only. Possible values include: 'None', 'External', 'Internal'.      Default value: "None" .     :type virtual_network_type: str or      ~azure.mgmt.apimanagement.models.VirtualNetworkType     :param api_version_constraint: Control Plane Apis version constraint for      the API Management service.     :type api_version_constraint:      ~azure.mgmt.apimanagement.models.ApiVersionConstraint Parameters supplied to the CheckNameAvailability operation.      All required parameters must be populated in order to send to Azure.      :param name: Required. The name to check for availability.     :type name: str The response of the GetSsoToken operation.      :param redirect_uri: Redirect URL to the Publisher Portal containing the      SSO token.     :type redirect_uri: str Identity properties of the Api Management service resource.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :param type: Required. The type of identity used for the resource. The      type 'SystemAssigned, UserAssigned' includes both an implicitly created      identity and a set of user assigned identities. The type 'None' will      remove any identities from the service. Possible values include:      'SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None'     :type type: str or ~azure.mgmt.apimanagement.models.ApimIdentityType     :ivar principal_id: The principal id of the identity.     :vartype principal_id: str     :ivar tenant_id: The client tenant id of the identity.     :vartype tenant_id: str     :param user_assigned_identities: The list of user identities associated      with the resource. The user identity      dictionary key references will be ARM resource ids in the form:      '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/      providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.     :type user_assigned_identities: dict[str,      ~azure.mgmt.apimanagement.models.UserIdentityProperties] Response of the CheckNameAvailability operation.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar name_available: True if the name is available and can be used to      create a new API Management service; otherwise false.     :vartype name_available: bool     :ivar message: If reason == invalid, provide the user with the reason why      the given name is invalid, and provide the resource naming requirements so      that the user can select a valid name. If reason == AlreadyExists, explain      that <resourceName> is already in use, and direct them to select a      different name.     :vartype message: str     :param reason: Invalid indicates the name provided does not match the      resource provider’s naming requirements (incorrect length, unsupported      characters, etc.)  AlreadyExists indicates that the name is already in use      and is therefore unavailable. Possible values include: 'Valid', 'Invalid',      'AlreadyExists'     :type reason: str or      ~azure.mgmt.apimanagement.models.NameAvailabilityReason The Resource definition.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource is set to      Microsoft.ApiManagement.     :vartype type: str     :param tags: Resource tags.     :type tags: dict[str, str] A single API Management service resource in List or Get response.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource is set to      Microsoft.ApiManagement.     :vartype type: str     :param tags: Resource tags.     :type tags: dict[str, str]     :param notification_sender_email: Email address from which the      notification will be sent.     :type notification_sender_email: str     :ivar provisioning_state: The current provisioning state of the API      Management service which can be one of the following:      Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.     :vartype provisioning_state: str     :ivar target_provisioning_state: The provisioning state of the API      Management service, which is targeted by the long running operation      started on the service.     :vartype target_provisioning_state: str     :ivar created_at_utc: Creation UTC date of the API Management service.The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :vartype created_at_utc: datetime     :ivar gateway_url: Gateway URL of the API Management service.     :vartype gateway_url: str     :ivar gateway_regional_url: Gateway URL of the API Management service in      the Default Region.     :vartype gateway_regional_url: str     :ivar portal_url: Publisher portal endpoint Url of the API Management      service.     :vartype portal_url: str     :ivar management_api_url: Management API endpoint URL of the API      Management service.     :vartype management_api_url: str     :ivar scm_url: SCM endpoint URL of the API Management service.     :vartype scm_url: str     :ivar developer_portal_url: DEveloper Portal endpoint URL of the API      Management service.     :vartype developer_portal_url: str     :param hostname_configurations: Custom hostname configuration of the API      Management service.     :type hostname_configurations:      list[~azure.mgmt.apimanagement.models.HostnameConfiguration]     :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the      API Management service in Primary region. Available only for Basic,      Standard and Premium SKU.     :vartype public_ip_addresses: list[str]     :ivar private_ip_addresses: Private Static Load Balanced IP addresses of      the API Management service in Primary region which is deployed in an      Internal Virtual Network. Available only for Basic, Standard and Premium      SKU.     :vartype private_ip_addresses: list[str]     :param virtual_network_configuration: Virtual network configuration of the      API Management service.     :type virtual_network_configuration:      ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration     :param additional_locations: Additional datacenter locations of the API      Management service.     :type additional_locations:      list[~azure.mgmt.apimanagement.models.AdditionalLocation]     :param custom_properties: Custom properties of the API Management      service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`      will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1      and 1.2).</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`      can be used to disable just TLS 1.1.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`      can be used to disable TLS 1.0 on an API Management service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`      can be used to disable just TLS 1.1 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`      can be used to disable TLS 1.0 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can      be used to enable HTTP2 protocol on an API Management service.</br>Not      specifying any of these properties on PATCH operation will reset omitted      properties' values to their defaults. For all the settings except Http2      the default value is `True` if the service was created on or before April      1st 2018 and `False` otherwise. Http2 setting's default value is      `False`.</br></br>You can disable any of next ciphers by using settings      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.      The default value is `true` for them.  Note: next ciphers can't be      disabled since they are required by Azure CloudService internal      components:      TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384     :type custom_properties: dict[str, str]     :param certificates: List of Certificates that need to be installed in the      API Management service. Max supported certificates that can be installed      is 10.     :type certificates:      list[~azure.mgmt.apimanagement.models.CertificateConfiguration]     :param enable_client_certificate: Property only meant to be used for      Consumption SKU Service. This enforces a client certificate to be      presented on each request to the gateway. This also enables the ability to      authenticate the certificate in the policy on the gateway. Default value:      False .     :type enable_client_certificate: bool     :param disable_gateway: Property only valid for an Api Management service      deployed in multiple locations. This can be used to disable the gateway in      master region. Default value: False .     :type disable_gateway: bool     :param virtual_network_type: The type of VPN in which API Management      service needs to be configured in. None (Default Value) means the API      Management service is not part of any Virtual Network, External means the      API Management deployment is set up inside a Virtual Network having an      Internet Facing Endpoint, and Internal means that API Management      deployment is setup inside a Virtual Network having an Intranet Facing      Endpoint only. Possible values include: 'None', 'External', 'Internal'.      Default value: "None" .     :type virtual_network_type: str or      ~azure.mgmt.apimanagement.models.VirtualNetworkType     :param api_version_constraint: Control Plane Apis version constraint for      the API Management service.     :type api_version_constraint:      ~azure.mgmt.apimanagement.models.ApiVersionConstraint     :param publisher_email: Required. Publisher email.     :type publisher_email: str     :param publisher_name: Required. Publisher name.     :type publisher_name: str     :param sku: Required. SKU properties of the API Management service.     :type sku:      ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties     :param identity: Managed service identity of the Api Management service.     :type identity:      ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity     :param location: Required. Resource location.     :type location: str     :ivar etag: ETag of the resource.     :vartype etag: str API Management service resource SKU properties.      All required parameters must be populated in order to send to Azure.      :param name: Required. Name of the Sku. Possible values include:      'Developer', 'Standard', 'Premium', 'Basic', 'Consumption'     :type name: str or ~azure.mgmt.apimanagement.models.SkuType     :param capacity: Required. Capacity of the SKU (number of deployed units      of the SKU). For Consumption SKU capacity must be specified as 0.     :type capacity: int Parameter supplied to Update Api Management Service.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource is set to      Microsoft.ApiManagement.     :vartype type: str     :param tags: Resource tags.     :type tags: dict[str, str]     :param notification_sender_email: Email address from which the      notification will be sent.     :type notification_sender_email: str     :ivar provisioning_state: The current provisioning state of the API      Management service which can be one of the following:      Created/Activating/Succeeded/Updating/Failed/Stopped/Terminating/TerminationFailed/Deleted.     :vartype provisioning_state: str     :ivar target_provisioning_state: The provisioning state of the API      Management service, which is targeted by the long running operation      started on the service.     :vartype target_provisioning_state: str     :ivar created_at_utc: Creation UTC date of the API Management service.The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :vartype created_at_utc: datetime     :ivar gateway_url: Gateway URL of the API Management service.     :vartype gateway_url: str     :ivar gateway_regional_url: Gateway URL of the API Management service in      the Default Region.     :vartype gateway_regional_url: str     :ivar portal_url: Publisher portal endpoint Url of the API Management      service.     :vartype portal_url: str     :ivar management_api_url: Management API endpoint URL of the API      Management service.     :vartype management_api_url: str     :ivar scm_url: SCM endpoint URL of the API Management service.     :vartype scm_url: str     :ivar developer_portal_url: DEveloper Portal endpoint URL of the API      Management service.     :vartype developer_portal_url: str     :param hostname_configurations: Custom hostname configuration of the API      Management service.     :type hostname_configurations:      list[~azure.mgmt.apimanagement.models.HostnameConfiguration]     :ivar public_ip_addresses: Public Static Load Balanced IP addresses of the      API Management service in Primary region. Available only for Basic,      Standard and Premium SKU.     :vartype public_ip_addresses: list[str]     :ivar private_ip_addresses: Private Static Load Balanced IP addresses of      the API Management service in Primary region which is deployed in an      Internal Virtual Network. Available only for Basic, Standard and Premium      SKU.     :vartype private_ip_addresses: list[str]     :param virtual_network_configuration: Virtual network configuration of the      API Management service.     :type virtual_network_configuration:      ~azure.mgmt.apimanagement.models.VirtualNetworkConfiguration     :param additional_locations: Additional datacenter locations of the API      Management service.     :type additional_locations:      list[~azure.mgmt.apimanagement.models.AdditionalLocation]     :param custom_properties: Custom properties of the API Management      service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168`      will disable the cipher TLS_RSA_WITH_3DES_EDE_CBC_SHA for all TLS(1.0, 1.1      and 1.2).</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11`      can be used to disable just TLS 1.1.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10`      can be used to disable TLS 1.0 on an API Management service.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11`      can be used to disable just TLS 1.1 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10`      can be used to disable TLS 1.0 for communications with      backends.</br>Setting      `Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2` can      be used to enable HTTP2 protocol on an API Management service.</br>Not      specifying any of these properties on PATCH operation will reset omitted      properties' values to their defaults. For all the settings except Http2      the default value is `True` if the service was created on or before April      1st 2018 and `False` otherwise. Http2 setting's default value is      `False`.</br></br>You can disable any of next ciphers by using settings      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.[cipher_name]`:      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,      TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA. For example,      `Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TLS_RSA_WITH_AES_128_CBC_SHA256`:`false`.      The default value is `true` for them.  Note: next ciphers can't be      disabled since they are required by Azure CloudService internal      components:      TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384     :type custom_properties: dict[str, str]     :param certificates: List of Certificates that need to be installed in the      API Management service. Max supported certificates that can be installed      is 10.     :type certificates:      list[~azure.mgmt.apimanagement.models.CertificateConfiguration]     :param enable_client_certificate: Property only meant to be used for      Consumption SKU Service. This enforces a client certificate to be      presented on each request to the gateway. This also enables the ability to      authenticate the certificate in the policy on the gateway. Default value:      False .     :type enable_client_certificate: bool     :param disable_gateway: Property only valid for an Api Management service      deployed in multiple locations. This can be used to disable the gateway in      master region. Default value: False .     :type disable_gateway: bool     :param virtual_network_type: The type of VPN in which API Management      service needs to be configured in. None (Default Value) means the API      Management service is not part of any Virtual Network, External means the      API Management deployment is set up inside a Virtual Network having an      Internet Facing Endpoint, and Internal means that API Management      deployment is setup inside a Virtual Network having an Intranet Facing      Endpoint only. Possible values include: 'None', 'External', 'Internal'.      Default value: "None" .     :type virtual_network_type: str or      ~azure.mgmt.apimanagement.models.VirtualNetworkType     :param api_version_constraint: Control Plane Apis version constraint for      the API Management service.     :type api_version_constraint:      ~azure.mgmt.apimanagement.models.ApiVersionConstraint     :param publisher_email: Publisher email.     :type publisher_email: str     :param publisher_name: Publisher name.     :type publisher_name: str     :param sku: SKU properties of the API Management service.     :type sku:      ~azure.mgmt.apimanagement.models.ApiManagementServiceSkuProperties     :param identity: Managed service identity of the Api Management service.     :type identity:      ~azure.mgmt.apimanagement.models.ApiManagementServiceIdentity     :ivar etag: ETag of the resource.     :vartype etag: str ApiRelease details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param api_id: Identifier of the API the release belongs to.     :type api_id: str     :ivar created_date_time: The time the API was released. The date conforms      to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the ISO 8601      standard.     :vartype created_date_time: datetime     :ivar updated_date_time: The time the API release was updated.     :vartype updated_date_time: datetime     :param notes: Release Notes     :type notes: str Summary of revision metadata.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar api_id: Identifier of the API Revision.     :vartype api_id: str     :ivar api_revision: Revision number of API.     :vartype api_revision: str     :ivar created_date_time: The time the API Revision was created. The date      conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the      ISO 8601 standard.     :vartype created_date_time: datetime     :ivar updated_date_time: The time the API Revision were updated. The date      conforms to the following format: yyyy-MM-ddTHH:mm:ssZ as specified by the      ISO 8601 standard.     :vartype updated_date_time: datetime     :ivar description: Description of the API Revision.     :vartype description: str     :ivar private_url: Gateway URL for accessing the non-current API Revision.     :vartype private_url: str     :ivar is_online: Indicates if API revision is the current api revision.     :vartype is_online: bool     :ivar is_current: Indicates if API revision is accessible via the gateway.     :vartype is_current: bool Object used to create an API Revision or Version based on an existing API     Revision.      :param source_api_id: Resource identifier of API to be used to create the      revision from.     :type source_api_id: str     :param api_version_name: Version identifier for the new API Version.     :type api_version_name: str     :param api_revision_description: Description of new API Revision.     :type api_revision_description: str     :param api_version_set: Version set details     :type api_version_set:      ~azure.mgmt.apimanagement.models.ApiVersionSetContractDetails API contract properties for the Tag Resources.      Variables are only populated by the server, and will be ignored when     sending a request.      :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool     :param id: API identifier in the form /apis/{apiId}.     :type id: str     :param name: API name.     :type name: str     :param service_url: Absolute URL of the backend service implementing this      API.     :type service_url: str     :param path: Relative URL uniquely identifying this API and all of its      resource paths within the API Management service instance. It is appended      to the API endpoint base URL specified during the service instance      creation to form a public URL for this API.     :type path: str     :param protocols: Describes on which protocols the operations in this API      can be invoked.     :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol] API update contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      :param description: Description of the API. May include HTML formatting      tags.     :type description: str     :param authentication_settings: Collection of authentication settings      included into this API.     :type authentication_settings:      ~azure.mgmt.apimanagement.models.AuthenticationSettingsContract     :param subscription_key_parameter_names: Protocols over which API is made      available.     :type subscription_key_parameter_names:      ~azure.mgmt.apimanagement.models.SubscriptionKeyParameterNamesContract     :param api_type: Type of API. Possible values include: 'http', 'soap'     :type api_type: str or ~azure.mgmt.apimanagement.models.ApiType     :param api_revision: Describes the Revision of the Api. If no value is      provided, default revision 1 is created     :type api_revision: str     :param api_version: Indicates the Version identifier of the API if the API      is versioned     :type api_version: str     :param is_current: Indicates if API revision is current api revision.     :type is_current: bool     :ivar is_online: Indicates if API revision is accessible via the gateway.     :vartype is_online: bool     :param api_revision_description: Description of the Api Revision.     :type api_revision_description: str     :param api_version_description: Description of the Api Version.     :type api_version_description: str     :param api_version_set_id: A resource identifier for the related      ApiVersionSet.     :type api_version_set_id: str     :param subscription_required: Specifies whether an API or Product      subscription is required for accessing the API.     :type subscription_required: bool     :param display_name: API name.     :type display_name: str     :param service_url: Absolute URL of the backend service implementing this      API.     :type service_url: str     :param path: Relative URL uniquely identifying this API and all of its      resource paths within the API Management service instance. It is appended      to the API endpoint base URL specified during the service instance      creation to form a public URL for this API.     :type path: str     :param protocols: Describes on which protocols the operations in this API      can be invoked.     :type protocols: list[str or ~azure.mgmt.apimanagement.models.Protocol] Control Plane Apis version constraint for the API Management service.      :param min_api_version: Limit control plane API calls to API Management      service with version equal to or newer than this value.     :type min_api_version: str Api Version Set Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Description of API Version Set.     :type description: str     :param version_query_name: Name of query parameter that indicates the API      Version if versioningScheme is set to `query`.     :type version_query_name: str     :param version_header_name: Name of HTTP header parameter that indicates      the API Version if versioningScheme is set to `header`.     :type version_header_name: str     :param display_name: Required. Name of API Version Set     :type display_name: str     :param versioning_scheme: Required. An value that determines where the API      Version identifer will be located in a HTTP request. Possible values      include: 'Segment', 'Query', 'Header'     :type versioning_scheme: str or      ~azure.mgmt.apimanagement.models.VersioningScheme An API Version Set contains the common configuration for a set of API     Versions relating .      :param id: Identifier for existing API Version Set. Omit this value to      create a new Version Set.     :type id: str     :param name: The display Name of the API Version Set.     :type name: str     :param description: Description of API Version Set.     :type description: str     :param versioning_scheme: An value that determines where the API Version      identifer will be located in a HTTP request. Possible values include:      'Segment', 'Query', 'Header'     :type versioning_scheme: str or ~azure.mgmt.apimanagement.models.enum     :param version_query_name: Name of query parameter that indicates the API      Version if versioningScheme is set to `query`.     :type version_query_name: str     :param version_header_name: Name of HTTP header parameter that indicates      the API Version if versioningScheme is set to `header`.     :type version_header_name: str Api Version set base parameters.      :param description: Description of API Version Set.     :type description: str     :param version_query_name: Name of query parameter that indicates the API      Version if versioningScheme is set to `query`.     :type version_query_name: str     :param version_header_name: Name of HTTP header parameter that indicates      the API Version if versioningScheme is set to `header`.     :type version_header_name: str Parameters to update or create an Api Version Set Contract.      :param description: Description of API Version Set.     :type description: str     :param version_query_name: Name of query parameter that indicates the API      Version if versioningScheme is set to `query`.     :type version_query_name: str     :param version_header_name: Name of HTTP header parameter that indicates      the API Version if versioningScheme is set to `header`.     :type version_header_name: str     :param display_name: Name of API Version Set     :type display_name: str     :param versioning_scheme: An value that determines where the API Version      identifer will be located in a HTTP request. Possible values include:      'Segment', 'Query', 'Header'     :type versioning_scheme: str or      ~azure.mgmt.apimanagement.models.VersioningScheme Association entity details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param provisioning_state: Provisioning state. Possible values include:      'created'     :type provisioning_state: str or      ~azure.mgmt.apimanagement.models.ProvisioningState API Authentication Settings.      :param o_auth2: OAuth2 Authentication settings     :type o_auth2:      ~azure.mgmt.apimanagement.models.OAuth2AuthenticationSettingsContract     :param openid: OpenID Connect Authentication Settings     :type openid:      ~azure.mgmt.apimanagement.models.OpenIdAuthenticationSettingsContract External OAuth authorization server settings.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Description of the authorization server. Can contain      HTML formatting tags.     :type description: str     :param authorization_methods: HTTP verbs supported by the authorization      endpoint. GET must be always present. POST is optional.     :type authorization_methods: list[str or      ~azure.mgmt.apimanagement.models.AuthorizationMethod]     :param client_authentication_method: Method of authentication supported by      the token endpoint of this authorization server. Possible values are Basic      and/or Body. When Body is specified, client credentials and other      parameters are passed within the request body in the      application/x-www-form-urlencoded format.     :type client_authentication_method: list[str or      ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]     :param token_body_parameters: Additional parameters required by the token      endpoint of this authorization server represented as an array of JSON      objects with name and value string properties, i.e. {"name" : "name      value", "value": "a value"}.     :type token_body_parameters:      list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]     :param token_endpoint: OAuth token endpoint. Contains absolute URI to      entity being referenced.     :type token_endpoint: str     :param support_state: If true, authorization server will include state      parameter from the authorization request to its response. Client may use      state parameter to raise protocol security.     :type support_state: bool     :param default_scope: Access token scope that is going to be requested by      default. Can be overridden at the API level. Should be provided in the      form of a string containing space-delimited values.     :type default_scope: str     :param bearer_token_sending_methods: Specifies the mechanism by which      access token is passed to the API.     :type bearer_token_sending_methods: list[str or      ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]     :param resource_owner_username: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner username.     :type resource_owner_username: str     :param resource_owner_password: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner password.     :type resource_owner_password: str     :param display_name: Required. User-friendly authorization server name.     :type display_name: str     :param client_registration_endpoint: Required. Optional reference to a      page where client or app registration for this authorization server is      performed. Contains absolute URL to entity being referenced.     :type client_registration_endpoint: str     :param authorization_endpoint: Required. OAuth authorization endpoint. See      http://tools.ietf.org/html/rfc6749#section-3.2.     :type authorization_endpoint: str     :param grant_types: Required. Form of an authorization grant, which the      client uses to request the access token.     :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]     :param client_id: Required. Client or app id registered with this      authorization server.     :type client_id: str     :param client_secret: Client or app secret registered with this      authorization server. This property will not be filled on 'GET'      operations! Use '/listSecrets' POST request to get the value.     :type client_secret: str External OAuth authorization server Update settings contract.      :param description: Description of the authorization server. Can contain      HTML formatting tags.     :type description: str     :param authorization_methods: HTTP verbs supported by the authorization      endpoint. GET must be always present. POST is optional.     :type authorization_methods: list[str or      ~azure.mgmt.apimanagement.models.AuthorizationMethod]     :param client_authentication_method: Method of authentication supported by      the token endpoint of this authorization server. Possible values are Basic      and/or Body. When Body is specified, client credentials and other      parameters are passed within the request body in the      application/x-www-form-urlencoded format.     :type client_authentication_method: list[str or      ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]     :param token_body_parameters: Additional parameters required by the token      endpoint of this authorization server represented as an array of JSON      objects with name and value string properties, i.e. {"name" : "name      value", "value": "a value"}.     :type token_body_parameters:      list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]     :param token_endpoint: OAuth token endpoint. Contains absolute URI to      entity being referenced.     :type token_endpoint: str     :param support_state: If true, authorization server will include state      parameter from the authorization request to its response. Client may use      state parameter to raise protocol security.     :type support_state: bool     :param default_scope: Access token scope that is going to be requested by      default. Can be overridden at the API level. Should be provided in the      form of a string containing space-delimited values.     :type default_scope: str     :param bearer_token_sending_methods: Specifies the mechanism by which      access token is passed to the API.     :type bearer_token_sending_methods: list[str or      ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]     :param resource_owner_username: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner username.     :type resource_owner_username: str     :param resource_owner_password: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner password.     :type resource_owner_password: str External OAuth authorization server settings.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Description of the authorization server. Can contain      HTML formatting tags.     :type description: str     :param authorization_methods: HTTP verbs supported by the authorization      endpoint. GET must be always present. POST is optional.     :type authorization_methods: list[str or      ~azure.mgmt.apimanagement.models.AuthorizationMethod]     :param client_authentication_method: Method of authentication supported by      the token endpoint of this authorization server. Possible values are Basic      and/or Body. When Body is specified, client credentials and other      parameters are passed within the request body in the      application/x-www-form-urlencoded format.     :type client_authentication_method: list[str or      ~azure.mgmt.apimanagement.models.ClientAuthenticationMethod]     :param token_body_parameters: Additional parameters required by the token      endpoint of this authorization server represented as an array of JSON      objects with name and value string properties, i.e. {"name" : "name      value", "value": "a value"}.     :type token_body_parameters:      list[~azure.mgmt.apimanagement.models.TokenBodyParameterContract]     :param token_endpoint: OAuth token endpoint. Contains absolute URI to      entity being referenced.     :type token_endpoint: str     :param support_state: If true, authorization server will include state      parameter from the authorization request to its response. Client may use      state parameter to raise protocol security.     :type support_state: bool     :param default_scope: Access token scope that is going to be requested by      default. Can be overridden at the API level. Should be provided in the      form of a string containing space-delimited values.     :type default_scope: str     :param bearer_token_sending_methods: Specifies the mechanism by which      access token is passed to the API.     :type bearer_token_sending_methods: list[str or      ~azure.mgmt.apimanagement.models.BearerTokenSendingMethod]     :param resource_owner_username: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner username.     :type resource_owner_username: str     :param resource_owner_password: Can be optionally specified when resource      owner password grant type is supported by this authorization server.      Default resource owner password.     :type resource_owner_password: str     :param display_name: User-friendly authorization server name.     :type display_name: str     :param client_registration_endpoint: Optional reference to a page where      client or app registration for this authorization server is performed.      Contains absolute URL to entity being referenced.     :type client_registration_endpoint: str     :param authorization_endpoint: OAuth authorization endpoint. See      http://tools.ietf.org/html/rfc6749#section-3.2.     :type authorization_endpoint: str     :param grant_types: Form of an authorization grant, which the client uses      to request the access token.     :type grant_types: list[str or ~azure.mgmt.apimanagement.models.GrantType]     :param client_id: Client or app id registered with this authorization      server.     :type client_id: str     :param client_secret: Client or app secret registered with this      authorization server. This property will not be filled on 'GET'      operations! Use '/listSecrets' POST request to get the value.     :type client_secret: str Authorization header information.      All required parameters must be populated in order to send to Azure.      :param scheme: Required. Authentication Scheme name.     :type scheme: str     :param parameter: Required. Authentication Parameter value.     :type parameter: str Backend entity base Parameter set.      :param title: Backend Title.     :type title: str     :param description: Backend Description.     :type description: str     :param resource_id: Management Uri of the Resource in External System.      This url can be the Arm Resource Id of Logic Apps, Function Apps or Api      Apps.     :type resource_id: str     :param properties: Backend Properties contract     :type properties: ~azure.mgmt.apimanagement.models.BackendProperties     :param credentials: Backend Credentials Contract Properties     :type credentials:      ~azure.mgmt.apimanagement.models.BackendCredentialsContract     :param proxy: Backend Proxy Contract Properties     :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract     :param tls: Backend TLS Properties     :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties Backend details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param title: Backend Title.     :type title: str     :param description: Backend Description.     :type description: str     :param resource_id: Management Uri of the Resource in External System.      This url can be the Arm Resource Id of Logic Apps, Function Apps or Api      Apps.     :type resource_id: str     :param properties: Backend Properties contract     :type properties: ~azure.mgmt.apimanagement.models.BackendProperties     :param credentials: Backend Credentials Contract Properties     :type credentials:      ~azure.mgmt.apimanagement.models.BackendCredentialsContract     :param proxy: Backend Proxy Contract Properties     :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract     :param tls: Backend TLS Properties     :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties     :param url: Required. Runtime Url of the Backend.     :type url: str     :param protocol: Required. Backend communication protocol. Possible values      include: 'http', 'soap'     :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol Details of the Credentials used to connect to Backend.      :param certificate: List of Client Certificate Thumbprint.     :type certificate: list[str]     :param query: Query Parameter description.     :type query: dict[str, list[str]]     :param header: Header Parameter description.     :type header: dict[str, list[str]]     :param authorization: Authorization header authentication     :type authorization:      ~azure.mgmt.apimanagement.models.BackendAuthorizationHeaderCredentials Properties specific to the Backend Type.      :param service_fabric_cluster: Backend Service Fabric Cluster Properties     :type service_fabric_cluster:      ~azure.mgmt.apimanagement.models.BackendServiceFabricClusterProperties Details of the Backend WebProxy Server to use in the Request to Backend.      All required parameters must be populated in order to send to Azure.      :param url: Required. WebProxy Server AbsoluteUri property which includes      the entire URI stored in the Uri instance, including all fragments and      query strings.     :type url: str     :param username: Username to connect to the WebProxy server     :type username: str     :param password: Password to connect to the WebProxy Server     :type password: str Reconnect request parameters.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param after: Duration in ISO8601 format after which reconnect will be      initiated. Minimum duration of the Reconnect is PT2M.     :type after: timedelta Properties of the Service Fabric Type Backend.      All required parameters must be populated in order to send to Azure.      :param client_certificatethumbprint: Required. The client certificate      thumbprint for the management endpoint.     :type client_certificatethumbprint: str     :param max_partition_resolution_retries: Maximum number of retries while      attempting resolve the partition.     :type max_partition_resolution_retries: int     :param management_endpoints: Required. The cluster management endpoint.     :type management_endpoints: list[str]     :param server_certificate_thumbprints: Thumbprints of certificates cluster      management service uses for tls communication     :type server_certificate_thumbprints: list[str]     :param server_x509_names: Server X509 Certificate Names Collection     :type server_x509_names:      list[~azure.mgmt.apimanagement.models.X509CertificateName] Properties controlling TLS Certificate Validation.      :param validate_certificate_chain: Flag indicating whether SSL certificate      chain validation should be done when using self-signed certificates for      this backend host. Default value: True .     :type validate_certificate_chain: bool     :param validate_certificate_name: Flag indicating whether SSL certificate      name validation should be done when using self-signed certificates for      this backend host. Default value: True .     :type validate_certificate_name: bool Backend update parameters.      :param title: Backend Title.     :type title: str     :param description: Backend Description.     :type description: str     :param resource_id: Management Uri of the Resource in External System.      This url can be the Arm Resource Id of Logic Apps, Function Apps or Api      Apps.     :type resource_id: str     :param properties: Backend Properties contract     :type properties: ~azure.mgmt.apimanagement.models.BackendProperties     :param credentials: Backend Credentials Contract Properties     :type credentials:      ~azure.mgmt.apimanagement.models.BackendCredentialsContract     :param proxy: Backend Proxy Contract Properties     :type proxy: ~azure.mgmt.apimanagement.models.BackendProxyContract     :param tls: Backend TLS Properties     :type tls: ~azure.mgmt.apimanagement.models.BackendTlsProperties     :param url: Runtime Url of the Backend.     :type url: str     :param protocol: Backend communication protocol. Possible values include:      'http', 'soap'     :type protocol: str or ~azure.mgmt.apimanagement.models.BackendProtocol Body logging settings.      :param bytes: Number of request body bytes to log.     :type bytes: int Cache details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Cache description     :type description: str     :param connection_string: Required. Runtime connection string to cache     :type connection_string: str     :param resource_id: Original uri of entity in external system cache points      to     :type resource_id: str Cache update details.      :param description: Cache description     :type description: str     :param connection_string: Runtime connection string to cache     :type connection_string: str     :param resource_id: Original uri of entity in external system cache points      to     :type resource_id: str Certificate configuration which consist of non-trusted intermediates and     root certificates.      All required parameters must be populated in order to send to Azure.      :param encoded_certificate: Base64 Encoded certificate.     :type encoded_certificate: str     :param certificate_password: <PASSWORD>.     :type certificate_password: str     :param store_name: Required. The      System.Security.Cryptography.x509certificates.StoreName certificate store      location. Only Root and CertificateAuthority are valid locations. Possible      values include: 'CertificateAuthority', 'Root'     :type store_name: str or ~azure.mgmt.apimanagement.models.enum     :param certificate: Certificate information.     :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation Certificate details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param subject: Required. Subject attribute of the certificate.     :type subject: str     :param thumbprint: Required. Thumbprint of the certificate.     :type thumbprint: str     :param expiration_date: Required. Expiration date of the certificate. The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :type expiration_date: datetime Certificate create or update details.      All required parameters must be populated in order to send to Azure.      :param data: Required. Base 64 encoded certificate using the      application/x-pkcs12 representation.     :type data: str     :param password: Required. Password for the Certificate     :type password: str SSL certificate information.      All required parameters must be populated in order to send to Azure.      :param expiry: Required. Expiration date of the certificate. The date      conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by      the ISO 8601 standard.     :type expiry: datetime     :param thumbprint: Required. Thumbprint of the certificate.     :type thumbprint: str     :param subject: Required. Subject of the certificate.     :type subject: str Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.      :param client_secret: Client or app secret used in IdentityProviders, Aad,      OpenID or OAuth.     :type client_secret: str CloudError. Details about connectivity to a resource.      All required parameters must be populated in order to send to Azure.      :param name: Required. The hostname of the resource which the service      depends on. This can be the database, storage or any other azure resource      on which the service depends upon.     :type name: str     :param status: Required. Resource Connectivity Status Type identifier.      Possible values include: 'initializing', 'success', 'failure'     :type status: str or      ~azure.mgmt.apimanagement.models.ConnectivityStatusType     :param error: Error details of the connectivity to the resource.     :type error: str     :param last_updated: Required. The date when the resource connectivity      status was last updated. This status should be updated every 15 minutes.      If this status has not been updated, then it means that the service has      lost network connectivity to the resource, from inside the Virtual      Network.The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`      as specified by the ISO 8601 standard.     :type last_updated: datetime     :param last_status_change: Required. The date when the resource      connectivity status last Changed from success to failure or vice-versa.      The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as      specified by the ISO 8601 standard.     :type last_status_change: datetime Deploy Tenant Configuration Contract.      All required parameters must be populated in order to send to Azure.      :param branch: Required. The name of the Git branch from which the      configuration is to be deployed to the configuration database.     :type branch: str     :param force: The value enforcing deleting subscriptions to products that      are deleted in this update.     :type force: bool Diagnostic details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param always_log: Specifies for what type of messages sampling settings      should not apply. Possible values include: 'allErrors'     :type always_log: str or ~azure.mgmt.apimanagement.models.AlwaysLog     :param logger_id: Required. Resource Id of a target logger.     :type logger_id: str     :param sampling: Sampling settings for Diagnostic.     :type sampling: ~azure.mgmt.apimanagement.models.SamplingSettings     :param frontend: Diagnostic settings for incoming/outgoing HTTP messages      to the Gateway.     :type frontend:      ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings     :param backend: Diagnostic settings for incoming/outgoing HTTP messages to      the Backend     :type backend: ~azure.mgmt.apimanagement.models.PipelineDiagnosticSettings     :param log_client_ip: Log the ClientIP. Default is false.     :type log_client_ip: bool     :param http_correlation_protocol: Sets correlation protocol to use for      Application Insights diagnostics. Possible values include: 'None',      'Legacy', 'W3C'     :type http_correlation_protocol: str or      ~azure.mgmt.apimanagement.models.HttpCorrelationProtocol     :param verbosity: The verbosity level applied to traces emitted by trace      policies. Possible values include: 'verbose', 'information', 'error'     :type verbosity: str or ~azure.mgmt.apimanagement.models.Verbosity Email Template details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param subject: Required. Subject of the Template.     :type subject: str     :param body: Required. Email Template Body. This should be a valid      XDocument     :type body: str     :param title: Title of the Template.     :type title: str     :param description: Description of the Email Template.     :type description: str     :ivar is_default: Whether the template is the default template provided by      Api Management or has been edited.     :vartype is_default: bool     :param parameters: Email Template Parameter values.     :type parameters:      list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties] Email Template Parameter contract.      :param name: Template parameter name.     :type name: str     :param title: Template parameter title.     :type title: str     :param description: Template parameter description.     :type description: str Email Template update Parameters.      :param subject: Subject of the Template.     :type subject: str     :param title: Title of the Template.     :type title: str     :param description: Description of the Email Template.     :type description: str     :param body: Email Template Body. This should be a valid XDocument     :type body: str     :param parameters: Email Template Parameter values.     :type parameters:      list[~azure.mgmt.apimanagement.models.EmailTemplateParametersContractProperties] Error Field contract.      :param code: Property level error code.     :type code: str     :param message: Human-readable representation of property-level error.     :type message: str     :param target: Property name.     :type target: str Error Response.      :param code: Service-defined error code. This code serves as a sub-status      for the HTTP error code specified in the response.     :type code: str     :param message: Human-readable representation of the error.     :type message: str     :param details: The list of invalid fields send in request, in case of      validation error.     :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract] Server responsed with exception of type: 'ErrorResponse'.      :param deserialize: A deserializer     :param response: Server response to be deserialized. Error Body contract.      :param code: Service-defined error code. This code serves as a sub-status      for the HTTP error code specified in the response.     :type code: str     :param message: Human-readable representation of the error.     :type message: str     :param details: The list of invalid fields send in request, in case of      validation error.     :type details: list[~azure.mgmt.apimanagement.models.ErrorFieldContract] Gateway details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param location_data: Gateway location.     :type location_data:      ~azure.mgmt.apimanagement.models.ResourceLocationDataContract     :param description: Gateway description     :type description: str Gateway hostname configuration details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param hostname: Hostname value. Supports valid domain name, partial or      full wildcard     :type hostname: str     :param certificate_id: Identifier of Certificate entity that will be used      for TLS connection establishment     :type certificate_id: str     :param negotiate_client_certificate: Determines whether gateway requests      client certificate     :type negotiate_client_certificate: bool Gateway key regeneration request contract properties.      All required parameters must be populated in order to send to Azure.      :param key_type: Required. The Key being regenerated. Possible values      include: 'primary', 'secondary'     :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType Gateway authentication keys.      :param primary: Primary gateway key.     :type primary: str     :param secondary: Secondary gateway key.     :type secondary: str Gateway access token.      :param value: Shared Access Authentication token value for the Gateway.     :type value: str Gateway token request contract properties.      All required parameters must be populated in order to send to Azure.      :param key_type: Required. The Key to be used to generate gateway token.      Possible values include: 'primary', 'secondary'. Default value: "primary"      .     :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType     :param expiry: Required. The Expiry time of the Token. Maximum token      expiry time is set to 30 days. The date conforms to the following format:      `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.     :type expiry: datetime Generate SSO Url operations response details.      :param value: Redirect Url containing the SSO URL value.     :type value: str Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param display_name: Required. Group name.     :type display_name: str     :param description: Group description. Can contain HTML formatting tags.     :type description: str     :ivar built_in: true if the group is one of the three system groups      (Administrators, Developers, or Guests); otherwise false.     :vartype built_in: bool     :param group_contract_type: Group type. Possible values include: 'custom',      'system', 'external'     :type group_contract_type: str or      ~azure.mgmt.apimanagement.models.GroupType     :param external_id: For external groups, this property contains the id of      the group from the external identity provider, e.g. for Azure Active      Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;      otherwise the value is null.     :type external_id: str Group contract Properties.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :param display_name: Required. Group name.     :type display_name: str     :param description: Group description. Can contain HTML formatting tags.     :type description: str     :ivar built_in: true if the group is one of the three system groups      (Administrators, Developers, or Guests); otherwise false.     :vartype built_in: bool     :param type: Group type. Possible values include: 'custom', 'system',      'external'     :type type: str or ~azure.mgmt.apimanagement.models.GroupType     :param external_id: For external groups, this property contains the id of      the group from the external identity provider, e.g. for Azure Active      Directory `aad://<tenant>.onmicrosoft.com/groups/<group object id>`;      otherwise the value is null.     :type external_id: str Parameters supplied to the Create Group operation.      All required parameters must be populated in order to send to Azure.      :param display_name: Required. Group name.     :type display_name: str     :param description: Group description.     :type description: str     :param type: Group type. Possible values include: 'custom', 'system',      'external'     :type type: str or ~azure.mgmt.apimanagement.models.GroupType     :param external_id: Identifier of the external groups, this property      contains the id of the group from the external identity provider, e.g. for      Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group      object id>`; otherwise the value is null.     :type external_id: str Parameters supplied to the Update Group operation.      :param display_name: Group name.     :type display_name: str     :param description: Group description.     :type description: str     :param type: Group type. Possible values include: 'custom', 'system',      'external'     :type type: str or ~azure.mgmt.apimanagement.models.GroupType     :param external_id: Identifier of the external groups, this property      contains the id of the group from the external identity provider, e.g. for      Azure Active Directory `aad://<tenant>.onmicrosoft.com/groups/<group      object id>`; otherwise the value is null.     :type external_id: str Custom hostname configuration.      All required parameters must be populated in order to send to Azure.      :param type: Required. Hostname type. Possible values include: 'Proxy',      'Portal', 'Management', 'Scm', 'DeveloperPortal'     :type type: str or ~azure.mgmt.apimanagement.models.HostnameType     :param host_name: Required. Hostname to configure on the Api Management      service.     :type host_name: str     :param key_vault_id: Url to the KeyVault Secret containing the Ssl      Certificate. If absolute Url containing version is provided, auto-update      of ssl certificate will not work. This requires Api Management service to      be configured with MSI. The secret should be of type      *application/x-pkcs12*     :type key_vault_id: str     :param encoded_certificate: Base64 Encoded certificate.     :type encoded_certificate: str     :param certificate_password: <PASSWORD>.     :type certificate_password: str     :param default_ssl_binding: Specify true to setup the certificate      associated with this Hostname as the Default SSL Certificate. If a client      does not send the SNI header, then this will be the certificate that will      be challenged. The property is useful if a service has multiple custom      hostname enabled and it needs to decide on the default ssl certificate.      The setting only applied to Proxy Hostname Type. Default value: False .     :type default_ssl_binding: bool     :param negotiate_client_certificate: Specify true to always negotiate      client certificate on the hostname. Default Value is false. Default value:      False .     :type negotiate_client_certificate: bool     :param certificate: Certificate information.     :type certificate: ~azure.mgmt.apimanagement.models.CertificateInformation Http message diagnostic settings.      :param headers: Array of HTTP Headers to log.     :type headers: list[str]     :param body: Body logging settings.     :type body: ~azure.mgmt.apimanagement.models.BodyDiagnosticSettings Identity Provider Base Parameter Properties.      :param type: Identity Provider Type identifier. Possible values include:      'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'     :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType     :param signin_tenant: The TenantId to use instead of Common when logging      into Active Directory     :type signin_tenant: str     :param allowed_tenants: List of Allowed Tenants when configuring Azure      Active Directory login.     :type allowed_tenants: list[str]     :param authority: OpenID Connect discovery endpoint hostname for AAD or      AAD B2C.     :type authority: str     :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C      Identity Provider.     :type signup_policy_name: str     :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C      Identity Provider.     :type signin_policy_name: str     :param profile_editing_policy_name: Profile Editing Policy Name. Only      applies to AAD B2C Identity Provider.     :type profile_editing_policy_name: str     :param password_reset_policy_name: Password Reset Policy Name. Only      applies to AAD B2C Identity Provider.     :type password_reset_policy_name: str Identity Provider details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param identity_provider_contract_type: Identity Provider Type identifier.      Possible values include: 'facebook', 'google', 'microsoft', 'twitter',      'aad', 'aadB2C'     :type identity_provider_contract_type: str or      ~azure.mgmt.apimanagement.models.IdentityProviderType     :param signin_tenant: The TenantId to use instead of Common when logging      into Active Directory     :type signin_tenant: str     :param allowed_tenants: List of Allowed Tenants when configuring Azure      Active Directory login.     :type allowed_tenants: list[str]     :param authority: OpenID Connect discovery endpoint hostname for AAD or      AAD B2C.     :type authority: str     :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C      Identity Provider.     :type signup_policy_name: str     :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C      Identity Provider.     :type signin_policy_name: str     :param profile_editing_policy_name: Profile Editing Policy Name. Only      applies to AAD B2C Identity Provider.     :type profile_editing_policy_name: str     :param password_reset_policy_name: Password Reset Policy Name. Only      applies to AAD B2C Identity Provider.     :type password_reset_policy_name: str     :param client_id: Required. Client Id of the Application in the external      Identity Provider. It is App ID for Facebook login, Client ID for Google      login, App ID for Microsoft.     :type client_id: str     :param client_secret: Client secret of the Application in external      Identity Provider, used to authenticate login request. For example, it is      App Secret for Facebook login, API Key for Google login, Public Key for      Microsoft. This property will not be filled on 'GET' operations! Use      '/listSecrets' POST request to get the value.     :type client_secret: str Identity Provider details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param identity_provider_create_contract_type: Identity Provider Type      identifier. Possible values include: 'facebook', 'google', 'microsoft',      'twitter', 'aad', 'aadB2C'     :type identity_provider_create_contract_type: str or      ~azure.mgmt.apimanagement.models.IdentityProviderType     :param signin_tenant: The TenantId to use instead of Common when logging      into Active Directory     :type signin_tenant: str     :param allowed_tenants: List of Allowed Tenants when configuring Azure      Active Directory login.     :type allowed_tenants: list[str]     :param authority: OpenID Connect discovery endpoint hostname for AAD or      AAD B2C.     :type authority: str     :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C      Identity Provider.     :type signup_policy_name: str     :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C      Identity Provider.     :type signin_policy_name: str     :param profile_editing_policy_name: Profile Editing Policy Name. Only      applies to AAD B2C Identity Provider.     :type profile_editing_policy_name: str     :param password_reset_policy_name: Password Reset Policy Name. Only      applies to AAD B2C Identity Provider.     :type password_reset_policy_name: str     :param client_id: Required. Client Id of the Application in the external      Identity Provider. It is App ID for Facebook login, Client ID for Google      login, App ID for Microsoft.     :type client_id: str     :param client_secret: Required. Client secret of the Application in      external Identity Provider, used to authenticate login request. For      example, it is App Secret for Facebook login, API Key for Google login,      Public Key for Microsoft. This property will not be filled on 'GET'      operations! Use '/listSecrets' POST request to get the value.     :type client_secret: str Parameters supplied to update Identity Provider.      :param type: Identity Provider Type identifier. Possible values include:      'facebook', 'google', 'microsoft', 'twitter', 'aad', 'aadB2C'     :type type: str or ~azure.mgmt.apimanagement.models.IdentityProviderType     :param signin_tenant: The TenantId to use instead of Common when logging      into Active Directory     :type signin_tenant: str     :param allowed_tenants: List of Allowed Tenants when configuring Azure      Active Directory login.     :type allowed_tenants: list[str]     :param authority: OpenID Connect discovery endpoint hostname for AAD or      AAD B2C.     :type authority: str     :param signup_policy_name: Signup Policy Name. Only applies to AAD B2C      Identity Provider.     :type signup_policy_name: str     :param signin_policy_name: Signin Policy Name. Only applies to AAD B2C      Identity Provider.     :type signin_policy_name: str     :param profile_editing_policy_name: Profile Editing Policy Name. Only      applies to AAD B2C Identity Provider.     :type profile_editing_policy_name: str     :param password_reset_policy_name: Password Reset Policy Name. Only      applies to AAD B2C Identity Provider.     :type password_reset_policy_name: str     :param client_id: Client Id of the Application in the external Identity      Provider. It is App ID for Facebook login, Client ID for Google login, App      ID for Microsoft.     :type client_id: str     :param client_secret: Client secret of the Application in external      Identity Provider, used to authenticate login request. For example, it is      App Secret for Facebook login, API Key for Google login, Public Key for      Microsoft.     :type client_secret: str Issue Attachment Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param title: Required. Filename by which the binary data will be saved.     :type title: str     :param content_format: Required. Either 'link' if content is provided via      an HTTP link or the MIME type of the Base64-encoded binary data provided      in the 'content' property.     :type content_format: str     :param content: Required. An HTTP link or Base64-encoded binary data.     :type content: str Issue Comment Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param text: Required. Comment text.     :type text: str     :param created_date: Date and time when the comment was created.     :type created_date: datetime     :param user_id: Required. A resource identifier for the user who left the      comment.     :type user_id: str Issue Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param created_date: Date and time when the issue was created.     :type created_date: datetime     :param state: Status of the issue. Possible values include: 'proposed',      'open', 'removed', 'resolved', 'closed'     :type state: str or ~azure.mgmt.apimanagement.models.State     :param api_id: A resource identifier for the API the issue was created      for.     :type api_id: str     :param title: Required. The issue title.     :type title: str     :param description: Required. Text describing the issue.     :type description: str     :param user_id: Required. A resource identifier for the user created the      issue.     :type user_id: str Issue contract Base Properties.      :param created_date: Date and time when the issue was created.     :type created_date: datetime     :param state: Status of the issue. Possible values include: 'proposed',      'open', 'removed', 'resolved', 'closed'     :type state: str or ~azure.mgmt.apimanagement.models.State     :param api_id: A resource identifier for the API the issue was created      for.     :type api_id: str Issue update Parameters.      :param created_date: Date and time when the issue was created.     :type created_date: datetime     :param state: Status of the issue. Possible values include: 'proposed',      'open', 'removed', 'resolved', 'closed'     :type state: str or ~azure.mgmt.apimanagement.models.State     :param api_id: A resource identifier for the API the issue was created      for.     :type api_id: str     :param title: The issue title.     :type title: str     :param description: Text describing the issue.     :type description: str     :param user_id: A resource identifier for the user created the issue.     :type user_id: str Logger details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param logger_type: Required. Logger type. Possible values include:      'azureEventHub', 'applicationInsights'     :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType     :param description: Logger description.     :type description: str     :param credentials: Required. The name and SendRule connection string of      the event hub for azureEventHub logger.      Instrumentation key for applicationInsights logger.     :type credentials: dict[str, str]     :param is_buffered: Whether records are buffered in the logger before      publishing. Default is assumed to be true.     :type is_buffered: bool     :param resource_id: Azure Resource Id of a log target (either Azure Event      Hub resource or Azure Application Insights resource).     :type resource_id: str Logger update contract.      :param logger_type: Logger type. Possible values include: 'azureEventHub',      'applicationInsights'     :type logger_type: str or ~azure.mgmt.apimanagement.models.LoggerType     :param description: Logger description.     :type description: str     :param credentials: Logger credentials.     :type credentials: dict[str, str]     :param is_buffered: Whether records are buffered in the logger before      publishing. Default is assumed to be true.     :type is_buffered: bool NamedValue details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param tags: Optional tags that when provided can be used to filter the      NamedValue list.     :type tags: list[str]     :param secret: Determines whether the value is a secret and should be      encrypted or not. Default value is false.     :type secret: bool     :param display_name: Required. Unique name of NamedValue. It may contain      only letters, digits, period, dash, and underscore characters.     :type display_name: str     :param value: Value of the NamedValue. Can contain policy expressions. It      may not be empty or consist only of whitespace. This property will not be      filled on 'GET' operations! Use '/listSecrets' POST request to get the      value.     :type value: str NamedValue details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param tags: Optional tags that when provided can be used to filter the      NamedValue list.     :type tags: list[str]     :param secret: Determines whether the value is a secret and should be      encrypted or not. Default value is false.     :type secret: bool     :param display_name: Required. Unique name of NamedValue. It may contain      only letters, digits, period, dash, and underscore characters.     :type display_name: str     :param value: Required. Value of the NamedValue. Can contain policy      expressions. It may not be empty or consist only of whitespace. This      property will not be filled on 'GET' operations! Use '/listSecrets' POST      request to get the value.     :type value: str NamedValue Entity Base Parameters set.      :param tags: Optional tags that when provided can be used to filter the      NamedValue list.     :type tags: list[str]     :param secret: Determines whether the value is a secret and should be      encrypted or not. Default value is false.     :type secret: bool NamedValue update Parameters.      :param tags: Optional tags that when provided can be used to filter the      NamedValue list.     :type tags: list[str]     :param secret: Determines whether the value is a secret and should be      encrypted or not. Default value is false.     :type secret: bool     :param display_name: Unique name of NamedValue. It may contain only      letters, digits, period, dash, and underscore characters.     :type display_name: str     :param value: Value of the NamedValue. Can contain policy expressions. It      may not be empty or consist only of whitespace.     :type value: str Network Status details.      All required parameters must be populated in order to send to Azure.      :param dns_servers: Required. Gets the list of DNS servers IPV4 addresses.     :type dns_servers: list[str]     :param connectivity_status: Required. Gets the list of Connectivity Status      to the Resources on which the service depends upon.     :type connectivity_status:      list[~azure.mgmt.apimanagement.models.ConnectivityStatusContract] Network Status in the Location.      :param location: Location of service     :type location: str     :param network_status: Network status in Location     :type network_status:      ~azure.mgmt.apimanagement.models.NetworkStatusContract Notification details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param title: Required. Title of the Notification.     :type title: str     :param description: Description of the Notification.     :type description: str     :param recipients: Recipient Parameter values.     :type recipients:      ~azure.mgmt.apimanagement.models.RecipientsContractProperties API OAuth2 Authentication settings details.      :param authorization_server_id: OAuth authorization server identifier.     :type authorization_server_id: str     :param scope: operations scope.     :type scope: str API OAuth2 Authentication settings details.      :param openid_provider_id: OAuth authorization server identifier.     :type openid_provider_id: str     :param bearer_token_sending_methods: How to send token to the server.     :type bearer_token_sending_methods: list[str or      ~azure.mgmt.apimanagement.models.BearerTokenSendingMethods] OpenId Connect Provider details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param display_name: Required. User-friendly OpenID Connect Provider name.     :type display_name: str     :param description: User-friendly description of OpenID Connect Provider.     :type description: str     :param metadata_endpoint: Required. Metadata endpoint URI.     :type metadata_endpoint: str     :param client_id: Required. Client ID of developer console which is the      client application.     :type client_id: str     :param client_secret: Client Secret of developer console which is the      client application.     :type client_secret: str Parameters supplied to the Update OpenID Connect Provider operation.      :param display_name: User-friendly OpenID Connect Provider name.     :type display_name: str     :param description: User-friendly description of OpenID Connect Provider.     :type description: str     :param metadata_endpoint: Metadata endpoint URI.     :type metadata_endpoint: str     :param client_id: Client ID of developer console which is the client      application.     :type client_id: str     :param client_secret: Client Secret of developer console which is the      client application.     :type client_secret: str REST API operation.      :param name: Operation name: {provider}/{resource}/{operation}     :type name: str     :param display: The object that describes the operation.     :type display: ~azure.mgmt.apimanagement.models.OperationDisplay     :param origin: The operation origin.     :type origin: str     :param properties: The operation properties.     :type properties: object Api Operation details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param template_parameters: Collection of URL template parameters.     :type template_parameters:      list[~azure.mgmt.apimanagement.models.ParameterContract]     :param description: Description of the operation. May include HTML      formatting tags.     :type description: str     :param request: An entity containing request details.     :type request: ~azure.mgmt.apimanagement.models.RequestContract     :param responses: Array of Operation responses.     :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]     :param policies: Operation Policies     :type policies: str     :param display_name: Required. Operation Name.     :type display_name: str     :param method: Required. A Valid HTTP Operation Method. Typical Http      Methods like GET, PUT, POST but not limited by only them.     :type method: str     :param url_template: Required. Relative URL template identifying the      target resource for this operation. May include parameters. Example:      /customers/{cid}/orders/{oid}/?date={date}     :type url_template: str The object that describes the operation.      :param provider: Friendly name of the resource provider     :type provider: str     :param operation: Operation type: read, write, delete, listKeys/action,      etc.     :type operation: str     :param resource: Resource type on which the operation is performed.     :type resource: str     :param description: Friendly name of the operation     :type description: str Api Operation Entity Base Contract details.      :param template_parameters: Collection of URL template parameters.     :type template_parameters:      list[~azure.mgmt.apimanagement.models.ParameterContract]     :param description: Description of the operation. May include HTML      formatting tags.     :type description: str     :param request: An entity containing request details.     :type request: ~azure.mgmt.apimanagement.models.RequestContract     :param responses: Array of Operation responses.     :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]     :param policies: Operation Policies     :type policies: str Operation Result.      Variables are only populated by the server, and will be ignored when     sending a request.      :param id: Operation result identifier.     :type id: str     :param status: Status of an async operation. Possible values include:      'Started', 'InProgress', 'Succeeded', 'Failed'     :type status: str or ~azure.mgmt.apimanagement.models.AsyncOperationStatus     :param started: Start time of an async operation. The date conforms to the      following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601      standard.     :type started: datetime     :param updated: Last update time of an async operation. The date conforms      to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO      8601 standard.     :type updated: datetime     :param result_info: Optional result info.     :type result_info: str     :param error: Error Body Contract     :type error: ~azure.mgmt.apimanagement.models.ErrorResponseBody     :ivar action_log: This property if only provided as part of the      TenantConfiguration_Validate operation. It contains the log the entities      which will be updated/created/deleted as part of the      TenantConfiguration_Deploy operation.     :vartype action_log:      list[~azure.mgmt.apimanagement.models.OperationResultLogItemContract] Log of the entity being created, updated or deleted.      :param object_type: The type of entity contract.     :type object_type: str     :param action: Action like create/update/delete.     :type action: str     :param object_key: Identifier of the entity being created/updated/deleted.     :type object_key: str Operation Entity contract Properties.      Variables are only populated by the server, and will be ignored when     sending a request.      :param id: Identifier of the operation in form /operations/{operationId}.     :type id: str     :ivar name: Operation name.     :vartype name: str     :ivar api_name: Api Name.     :vartype api_name: str     :ivar api_revision: Api Revision.     :vartype api_revision: str     :ivar api_version: Api Version.     :vartype api_version: str     :ivar description: Operation Description.     :vartype description: str     :ivar method: A Valid HTTP Operation Method. Typical Http Methods like      GET, PUT, POST but not limited by only them.     :vartype method: str     :ivar url_template: Relative URL template identifying the target resource      for this operation. May include parameters. Example:      /customers/{cid}/orders/{oid}/?date={date}     :vartype url_template: str Api Operation Update Contract details.      :param template_parameters: Collection of URL template parameters.     :type template_parameters:      list[~azure.mgmt.apimanagement.models.ParameterContract]     :param description: Description of the operation. May include HTML      formatting tags.     :type description: str     :param request: An entity containing request details.     :type request: ~azure.mgmt.apimanagement.models.RequestContract     :param responses: Array of Operation responses.     :type responses: list[~azure.mgmt.apimanagement.models.ResponseContract]     :param policies: Operation Policies     :type policies: str     :param display_name: Operation Name.     :type display_name: str     :param method: A Valid HTTP Operation Method. Typical Http Methods like      GET, PUT, POST but not limited by only them.     :type method: str     :param url_template: Relative URL template identifying the target resource      for this operation. May include parameters. Example:      /customers/{cid}/orders/{oid}/?date={date}     :type url_template: str Operation parameters details.      All required parameters must be populated in order to send to Azure.      :param name: Required. Parameter name.     :type name: str     :param description: Parameter description.     :type description: str     :param type: Required. Parameter type.     :type type: str     :param default_value: Default parameter value.     :type default_value: str     :param required: Specifies whether parameter is required or not.     :type required: bool     :param values: Parameter values.     :type values: list[str] Diagnostic settings for incoming/outgoing HTTP messages to the Gateway.      :param request: Diagnostic settings for request.     :type request: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic     :param response: Diagnostic settings for response.     :type response: ~azure.mgmt.apimanagement.models.HttpMessageDiagnostic The response of the list policy operation.      :param value: Policy Contract value.     :type value: list[~azure.mgmt.apimanagement.models.PolicyContract]     :param next_link: Next page link if any.     :type next_link: str Policy Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param value: Required. Contents of the Policy as defined by the format.     :type value: str     :param format: Format of the policyContent. Possible values include:      'xml', 'xml-link', 'rawxml', 'rawxml-link'. Default value: "xml" .     :type format: str or ~azure.mgmt.apimanagement.models.PolicyContentFormat Descriptions of APIM policies.      :param value: Descriptions of APIM policies.     :type value:      list[~azure.mgmt.apimanagement.models.PolicyDescriptionContract]     :param count: Total record count number.     :type count: long Policy description details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :ivar description: Policy description.     :vartype description: str     :ivar scope: Binary OR value of the Snippet scope.     :vartype scope: int Delegation settings for a developer portal.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param url: A delegation Url.     :type url: str     :param validation_key: A base64-encoded validation key to validate, that a      request is coming from Azure API Management.     :type validation_key: str     :param subscriptions: Subscriptions delegation settings.     :type subscriptions:      ~azure.mgmt.apimanagement.models.SubscriptionsDelegationSettingsProperties     :param user_registration: User registration delegation settings.     :type user_registration:      ~azure.mgmt.apimanagement.models.RegistrationDelegationSettingsProperties Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.      :param validation_key: This is secret value of the validation key in      portal settings.     :type validation_key: str Sign-In settings for the Developer Portal.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param enabled: Redirect Anonymous users to the Sign-In page.     :type enabled: bool Sign-Up settings for a developer portal.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param enabled: Allow users to sign up on a developer portal.     :type enabled: bool     :param terms_of_service: Terms of service contract properties.     :type terms_of_service:      ~azure.mgmt.apimanagement.models.TermsOfServiceProperties Product details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Product description. May include HTML formatting tags.     :type description: str     :param terms: Product terms of use. Developers trying to subscribe to the      product will be presented and required to accept these terms before they      can complete the subscription process.     :type terms: str     :param subscription_required: Whether a product subscription is required      for accessing APIs included in this product. If true, the product is      referred to as "protected" and a valid subscription key is required for a      request to an API included in the product to succeed. If false, the      product is referred to as "open" and requests to an API included in the      product can be made without a subscription key. If property is omitted      when creating a new product it's value is assumed to be true.     :type subscription_required: bool     :param approval_required: whether subscription approval is required. If      false, new subscriptions will be approved automatically enabling      developers to call the product’s APIs immediately after subscribing. If      true, administrators must manually approve the subscription before the      developer can any of the product’s APIs. Can be present only if      subscriptionRequired property is present and has a value of false.     :type approval_required: bool     :param subscriptions_limit: Whether the number of subscriptions a user can      have to this product at the same time. Set to null or omit to allow      unlimited per user subscriptions. Can be present only if      subscriptionRequired property is present and has a value of false.     :type subscriptions_limit: int     :param state: whether product is published or not. Published products are      discoverable by users of developer portal. Non published products are      visible only to administrators. Default state of Product is notPublished.      Possible values include: 'notPublished', 'published'     :type state: str or ~azure.mgmt.apimanagement.models.ProductState     :param display_name: Required. Product name.     :type display_name: str Product Entity Base Parameters.      :param description: Product description. May include HTML formatting tags.     :type description: str     :param terms: Product terms of use. Developers trying to subscribe to the      product will be presented and required to accept these terms before they      can complete the subscription process.     :type terms: str     :param subscription_required: Whether a product subscription is required      for accessing APIs included in this product. If true, the product is      referred to as "protected" and a valid subscription key is required for a      request to an API included in the product to succeed. If false, the      product is referred to as "open" and requests to an API included in the      product can be made without a subscription key. If property is omitted      when creating a new product it's value is assumed to be true.     :type subscription_required: bool     :param approval_required: whether subscription approval is required. If      false, new subscriptions will be approved automatically enabling      developers to call the product’s APIs immediately after subscribing. If      true, administrators must manually approve the subscription before the      developer can any of the product’s APIs. Can be present only if      subscriptionRequired property is present and has a value of false.     :type approval_required: bool     :param subscriptions_limit: Whether the number of subscriptions a user can      have to this product at the same time. Set to null or omit to allow      unlimited per user subscriptions. Can be present only if      subscriptionRequired property is present and has a value of false.     :type subscriptions_limit: int     :param state: whether product is published or not. Published products are      discoverable by users of developer portal. Non published products are      visible only to administrators. Default state of Product is notPublished.      Possible values include: 'notPublished', 'published'     :type state: str or ~azure.mgmt.apimanagement.models.ProductState Product profile.      All required parameters must be populated in order to send to Azure.      :param description: Product description. May include HTML formatting tags.     :type description: str     :param terms: Product terms of use. Developers trying to subscribe to the      product will be presented and required to accept these terms before they      can complete the subscription process.     :type terms: str     :param subscription_required: Whether a product subscription is required      for accessing APIs included in this product. If true, the product is      referred to as "protected" and a valid subscription key is required for a      request to an API included in the product to succeed. If false, the      product is referred to as "open" and requests to an API included in the      product can be made without a subscription key. If property is omitted      when creating a new product it's value is assumed to be true.     :type subscription_required: bool     :param approval_required: whether subscription approval is required. If      false, new subscriptions will be approved automatically enabling      developers to call the product’s APIs immediately after subscribing. If      true, administrators must manually approve the subscription before the      developer can any of the product’s APIs. Can be present only if      subscriptionRequired property is present and has a value of false.     :type approval_required: bool     :param subscriptions_limit: Whether the number of subscriptions a user can      have to this product at the same time. Set to null or omit to allow      unlimited per user subscriptions. Can be present only if      subscriptionRequired property is present and has a value of false.     :type subscriptions_limit: int     :param state: whether product is published or not. Published products are      discoverable by users of developer portal. Non published products are      visible only to administrators. Default state of Product is notPublished.      Possible values include: 'notPublished', 'published'     :type state: str or ~azure.mgmt.apimanagement.models.ProductState     :param id: Identifier of the product in the form of /products/{productId}     :type id: str     :param name: Required. Product name.     :type name: str Product Update parameters.      :param description: Product description. May include HTML formatting tags.     :type description: str     :param terms: Product terms of use. Developers trying to subscribe to the      product will be presented and required to accept these terms before they      can complete the subscription process.     :type terms: str     :param subscription_required: Whether a product subscription is required      for accessing APIs included in this product. If true, the product is      referred to as "protected" and a valid subscription key is required for a      request to an API included in the product to succeed. If false, the      product is referred to as "open" and requests to an API included in the      product can be made without a subscription key. If property is omitted      when creating a new product it's value is assumed to be true.     :type subscription_required: bool     :param approval_required: whether subscription approval is required. If      false, new subscriptions will be approved automatically enabling      developers to call the product’s APIs immediately after subscribing. If      true, administrators must manually approve the subscription before the      developer can any of the product’s APIs. Can be present only if      subscriptionRequired property is present and has a value of false.     :type approval_required: bool     :param subscriptions_limit: Whether the number of subscriptions a user can      have to this product at the same time. Set to null or omit to allow      unlimited per user subscriptions. Can be present only if      subscriptionRequired property is present and has a value of false.     :type subscriptions_limit: int     :param state: whether product is published or not. Published products are      discoverable by users of developer portal. Non published products are      visible only to administrators. Default state of Product is notPublished.      Possible values include: 'notPublished', 'published'     :type state: str or ~azure.mgmt.apimanagement.models.ProductState     :param display_name: Product name.     :type display_name: str Client or app secret used in IdentityProviders, Aad, OpenID or OAuth.      :param value: This is secret value of the NamedValue entity.     :type value: str Paged Quota Counter list representation.      :param value: Quota counter values.     :type value: list[~azure.mgmt.apimanagement.models.QuotaCounterContract]     :param count: Total record count number across all pages.     :type count: long     :param next_link: Next page link if any.     :type next_link: str Quota counter details.      All required parameters must be populated in order to send to Azure.      :param counter_key: Required. The Key value of the Counter. Must not be      empty.     :type counter_key: str     :param period_key: Required. Identifier of the Period for which the      counter was collected. Must not be empty.     :type period_key: str     :param period_start_time: Required. The date of the start of Counter      Period. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`      as specified by the ISO 8601 standard.     :type period_start_time: datetime     :param period_end_time: Required. The date of the end of Counter Period.      The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as      specified by the ISO 8601 standard.     :type period_end_time: datetime     :param value: Quota Value Properties     :type value:      ~azure.mgmt.apimanagement.models.QuotaCounterValueContractProperties Quota counter value details.      :param calls_count: Number of times Counter was called.     :type calls_count: int     :param kb_transferred: Data Transferred in KiloBytes.     :type kb_transferred: float Quota counter value details.      :param calls_count: Number of times Counter was called.     :type calls_count: int     :param kb_transferred: Data Transferred in KiloBytes.     :type kb_transferred: float Paged Recipient User list representation.      :param value: Page values.     :type value: list[~azure.mgmt.apimanagement.models.RecipientEmailContract]     :param next_link: Next page link if any.     :type next_link: str Recipient Email details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param email: User Email subscribed to notification.     :type email: str Notification Parameter contract.      :param emails: List of Emails subscribed for the notification.     :type emails: list[str]     :param users: List of Users subscribed for the notification.     :type users: list[str] Paged Recipient User list representation.      :param value: Page values.     :type value: list[~azure.mgmt.apimanagement.models.RecipientUserContract]     :param next_link: Next page link if any.     :type next_link: str Recipient User details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param user_id: API Management UserId subscribed to notification.     :type user_id: str Region profile.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar name: Region name.     :vartype name: str     :param is_master_region: whether Region is the master region.     :type is_master_region: bool     :param is_deleted: whether Region is deleted.     :type is_deleted: bool User registration delegation settings properties.      :param enabled: Enable or disable delegation for user registration.     :type enabled: bool Report data.      Variables are only populated by the server, and will be ignored when     sending a request.      :param name: Name depending on report endpoint specifies product, API,      operation or developer name.     :type name: str     :param timestamp: Start of aggregation period. The date conforms to the      following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601      standard.     :type timestamp: datetime     :param interval: Length of aggregation period.  Interval must be multiple      of 15 minutes and may not be zero. The value should be in ISO 8601 format      (http://en.wikipedia.org/wiki/ISO_8601#Durations).     :type interval: str     :param country: Country to which this record data is related.     :type country: str     :param region: Country region to which this record data is related.     :type region: str     :param zip: Zip code to which this record data is related.     :type zip: str     :ivar user_id: User identifier path. /users/{userId}     :vartype user_id: str     :ivar product_id: Product identifier path. /products/{productId}     :vartype product_id: str     :param api_id: API identifier path. /apis/{apiId}     :type api_id: str     :param operation_id: Operation identifier path.      /apis/{apiId}/operations/{operationId}     :type operation_id: str     :param api_region: API region identifier.     :type api_region: str     :param subscription_id: Subscription identifier path.      /subscriptions/{subscriptionId}     :type subscription_id: str     :param call_count_success: Number of successful calls. This includes calls      returning HttpStatusCode <= 301 and HttpStatusCode.NotModified and      HttpStatusCode.TemporaryRedirect     :type call_count_success: int     :param call_count_blocked: Number of calls blocked due to invalid      credentials. This includes calls returning HttpStatusCode.Unauthorized and      HttpStatusCode.Forbidden and HttpStatusCode.TooManyRequests     :type call_count_blocked: int     :param call_count_failed: Number of calls failed due to proxy or backend      errors. This includes calls returning HttpStatusCode.BadRequest(400) and      any Code between HttpStatusCode.InternalServerError (500) and 600     :type call_count_failed: int     :param call_count_other: Number of other calls.     :type call_count_other: int     :param call_count_total: Total number of calls.     :type call_count_total: int     :param bandwidth: Bandwidth consumed.     :type bandwidth: long     :param cache_hit_count: Number of times when content was served from cache      policy.     :type cache_hit_count: int     :param cache_miss_count: Number of times content was fetched from backend.     :type cache_miss_count: int     :param api_time_avg: Average time it took to process request.     :type api_time_avg: float     :param api_time_min: Minimum time it took to process request.     :type api_time_min: float     :param api_time_max: Maximum time it took to process request.     :type api_time_max: float     :param service_time_avg: Average time it took to process request on      backend.     :type service_time_avg: float     :param service_time_min: Minimum time it took to process request on      backend.     :type service_time_min: float     :param service_time_max: Maximum time it took to process request on      backend.     :type service_time_max: float Operation request/response representation details.      All required parameters must be populated in order to send to Azure.      :param content_type: Required. Specifies a registered or custom content      type for this representation, e.g. application/xml.     :type content_type: str     :param sample: An example of the representation.     :type sample: str     :param schema_id: Schema identifier. Applicable only if 'contentType'      value is neither 'application/x-www-form-urlencoded' nor      'multipart/form-data'.     :type schema_id: str     :param type_name: Type name defined by the schema. Applicable only if      'contentType' value is neither 'application/x-www-form-urlencoded' nor      'multipart/form-data'.     :type type_name: str     :param form_parameters: Collection of form parameters. Required if      'contentType' value is either 'application/x-www-form-urlencoded' or      'multipart/form-data'..     :type form_parameters:      list[~azure.mgmt.apimanagement.models.ParameterContract] Operation request details.      :param description: Operation request description.     :type description: str     :param query_parameters: Collection of operation request query parameters.     :type query_parameters:      list[~azure.mgmt.apimanagement.models.ParameterContract]     :param headers: Collection of operation request headers.     :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract]     :param representations: Collection of operation request representations.     :type representations:      list[~azure.mgmt.apimanagement.models.RepresentationContract] Request Report data.      Variables are only populated by the server, and will be ignored when     sending a request.      :param api_id: API identifier path. /apis/{apiId}     :type api_id: str     :param operation_id: Operation identifier path.      /apis/{apiId}/operations/{operationId}     :type operation_id: str     :ivar product_id: Product identifier path. /products/{productId}     :vartype product_id: str     :ivar user_id: User identifier path. /users/{userId}     :vartype user_id: str     :param method: The HTTP method associated with this request..     :type method: str     :param url: The full URL associated with this request.     :type url: str     :param ip_address: The client IP address associated with this request.     :type ip_address: str     :param backend_response_code: The HTTP status code received by the gateway      as a result of forwarding this request to the backend.     :type backend_response_code: str     :param response_code: The HTTP status code returned by the gateway.     :type response_code: int     :param response_size: The size of the response returned by the gateway.     :type response_size: int     :param timestamp: The date and time when this request was received by the      gateway in ISO 8601 format.     :type timestamp: datetime     :param cache: Specifies if response cache was involved in generating the      response. If the value is none, the cache was not used. If the value is      hit, cached response was returned. If the value is miss, the cache was      used but lookup resulted in a miss and request was fulfilled by the      backend.     :type cache: str     :param api_time: The total time it took to process this request.     :type api_time: float     :param service_time: he time it took to forward this request to the      backend and get the response back.     :type service_time: float     :param api_region: Azure region where the gateway that processed this      request is located.     :type api_region: str     :param subscription_id: Subscription identifier path.      /subscriptions/{subscriptionId}     :type subscription_id: str     :param request_id: Request Identifier.     :type request_id: str     :param request_size: The size of this request..     :type request_size: int Resource location data properties.      All required parameters must be populated in order to send to Azure.      :param name: Required. A canonical name for the geographic or physical      location.     :type name: str     :param city: The city or locality where the resource is located.     :type city: str     :param district: The district, state, or province where the resource is      located.     :type district: str     :param country_or_region: The country or region where the resource is      located.     :type country_or_region: str Describes an available API Management SKU.      :param name: Name of the Sku. Possible values include: 'Developer',      'Standard', 'Premium', 'Basic', 'Consumption'     :type name: str or ~azure.mgmt.apimanagement.models.SkuType Describes scaling information of a SKU.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar minimum: The minimum capacity.     :vartype minimum: int     :ivar maximum: The maximum capacity that can be set.     :vartype maximum: int     :ivar default: The default capacity.     :vartype default: int     :ivar scale_type: The scale type applicable to the sku. Possible values      include: 'automatic', 'manual', 'none'     :vartype scale_type: str or      ~azure.mgmt.apimanagement.models.ResourceSkuCapacityScaleType Describes an available API Management service SKU.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar resource_type: The type of resource the SKU applies to.     :vartype resource_type: str     :ivar sku: Specifies API Management SKU.     :vartype sku: ~azure.mgmt.apimanagement.models.ResourceSku     :ivar capacity: Specifies the number of API Management units.     :vartype capacity: ~azure.mgmt.apimanagement.models.ResourceSkuCapacity Operation response details.      All required parameters must be populated in order to send to Azure.      :param status_code: Required. Operation response HTTP status code.     :type status_code: int     :param description: Operation response description.     :type description: str     :param representations: Collection of operation response representations.     :type representations:      list[~azure.mgmt.apimanagement.models.RepresentationContract]     :param headers: Collection of operation response headers.     :type headers: list[~azure.mgmt.apimanagement.models.ParameterContract] Sampling settings for Diagnostic.      :param sampling_type: Sampling type. Possible values include: 'fixed'     :type sampling_type: str or ~azure.mgmt.apimanagement.models.SamplingType     :param percentage: Rate of sampling for fixed-rate sampling.     :type percentage: float Save Tenant Configuration Contract details.      All required parameters must be populated in order to send to Azure.      :param branch: Required. The name of the Git branch in which to commit the      current configuration snapshot.     :type branch: str     :param force: The value if true, the current configuration database is      committed to the Git repository, even if the Git repository has newer      changes that would be overwritten.     :type force: bool Schema Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param content_type: Required. Must be a valid a media type used in a      Content-Type header as defined in the RFC 2616. Media type of the schema      document (e.g. application/json, application/xml). </br> - `Swagger`      Schema use `application/vnd.ms-azure-apim.swagger.definitions+json` </br>      - `WSDL` Schema use `application/vnd.ms-azure-apim.xsd+xml` </br> -      `OpenApi` Schema use `application/vnd.oai.openapi.components+json` </br> -      `WADL Schema` use `application/vnd.ms-azure-apim.wadl.grammars+xml`.     :type content_type: str     :param value: Json escaped string defining the document representing the      Schema. Used for schemas other than Swagger/OpenAPI.     :type value: str     :param definitions: Types definitions. Used for Swagger/OpenAPI schemas      only, null otherwise.     :type definitions: object Subscription details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param owner_id: The user resource identifier of the subscription owner.      The value is a valid relative URL in the format of /users/{userId} where      {userId} is a user identifier.     :type owner_id: str     :param scope: Required. Scope like /products/{productId} or /apis or      /apis/{apiId}.     :type scope: str     :param display_name: The name of the subscription, or null if the      subscription has no name.     :type display_name: str     :param state: Required. Subscription state. Possible states are * active –      the subscription is active, * suspended – the subscription is blocked, and      the subscriber cannot call any APIs of the product, * submitted – the      subscription request has been made by the developer, but has not yet been      approved or rejected, * rejected – the subscription request has been      denied by an administrator, * cancelled – the subscription has been      cancelled by the developer or administrator, * expired – the subscription      reached its expiration date and was deactivated. Possible values include:      'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'     :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState     :ivar created_date: Subscription creation date. The date conforms to the      following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601      standard.     :vartype created_date: datetime     :param start_date: Subscription activation date. The setting is for audit      purposes only and the subscription is not automatically activated. The      subscription lifecycle can be managed by using the `state` property. The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :type start_date: datetime     :param expiration_date: Subscription expiration date. The setting is for      audit purposes only and the subscription is not automatically expired. The      subscription lifecycle can be managed by using the `state` property. The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :type expiration_date: datetime     :param end_date: Date when subscription was cancelled or expired. The      setting is for audit purposes only and the subscription is not      automatically cancelled. The subscription lifecycle can be managed by      using the `state` property. The date conforms to the following format:      `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.     :type end_date: datetime     :param notification_date: Upcoming subscription expiration notification      date. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as      specified by the ISO 8601 standard.     :type notification_date: datetime     :param primary_key: Subscription primary key. This property will not be      filled on 'GET' operations! Use '/listSecrets' POST request to get the      value.     :type primary_key: str     :param secondary_key: Subscription secondary key. This property will not      be filled on 'GET' operations! Use '/listSecrets' POST request to get the      value.     :type secondary_key: str     :param state_comment: Optional subscription comment added by an      administrator.     :type state_comment: str     :param allow_tracing: Determines whether tracing is enabled     :type allow_tracing: bool Subscription create details.      All required parameters must be populated in order to send to Azure.      :param owner_id: User (user id path) for whom subscription is being      created in form /users/{userId}     :type owner_id: str     :param scope: Required. Scope like /products/{productId} or /apis or      /apis/{apiId}.     :type scope: str     :param display_name: Required. Subscription name.     :type display_name: str     :param primary_key: Primary subscription key. If not specified during      request key will be generated automatically.     :type primary_key: str     :param secondary_key: Secondary subscription key. If not specified during      request key will be generated automatically.     :type secondary_key: str     :param state: Initial subscription state. If no value is specified,      subscription is created with Submitted state. Possible states are * active      – the subscription is active, * suspended – the subscription is blocked,      and the subscriber cannot call any APIs of the product, * submitted – the      subscription request has been made by the developer, but has not yet been      approved or rejected, * rejected – the subscription request has been      denied by an administrator, * cancelled – the subscription has been      cancelled by the developer or administrator, * expired – the subscription      reached its expiration date and was deactivated. Possible values include:      'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'     :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState     :param allow_tracing: Determines whether tracing can be enabled     :type allow_tracing: bool Subscription key parameter names details.      :param header: Subscription key header name.     :type header: str     :param query: Subscription key query string parameter name.     :type query: str Subscription keys.      :param primary_key: Subscription primary key.     :type primary_key: str     :param secondary_key: Subscription secondary key.     :type secondary_key: str Subscriptions delegation settings properties.      :param enabled: Enable or disable delegation for subscriptions.     :type enabled: bool Subscription update details.      :param owner_id: User identifier path: /users/{userId}     :type owner_id: str     :param scope: Scope like /products/{productId} or /apis or /apis/{apiId}     :type scope: str     :param expiration_date: Subscription expiration date. The setting is for      audit purposes only and the subscription is not automatically expired. The      subscription lifecycle can be managed by using the `state` property. The      date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified      by the ISO 8601 standard.     :type expiration_date: datetime     :param display_name: Subscription name.     :type display_name: str     :param primary_key: Primary subscription key.     :type primary_key: str     :param secondary_key: Secondary subscription key.     :type secondary_key: str     :param state: Subscription state. Possible states are * active – the      subscription is active, * suspended – the subscription is blocked, and the      subscriber cannot call any APIs of the product, * submitted – the      subscription request has been made by the developer, but has not yet been      approved or rejected, * rejected – the subscription request has been      denied by an administrator, * cancelled – the subscription has been      cancelled by the developer or administrator, * expired – the subscription      reached its expiration date and was deactivated. Possible values include:      'suspended', 'active', 'expired', 'submitted', 'rejected', 'cancelled'     :type state: str or ~azure.mgmt.apimanagement.models.SubscriptionState     :param state_comment: Comments describing subscription state change by the      administrator.     :type state_comment: str     :param allow_tracing: Determines whether tracing can be enabled     :type allow_tracing: bool Tag Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      All required parameters must be populated in order to send to Azure.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param display_name: Required. Tag name.     :type display_name: str Parameters supplied to Create/Update Tag operations.      All required parameters must be populated in order to send to Azure.      :param display_name: Required. Tag name.     :type display_name: str Contract details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param description: Description of the Tag.     :type description: str     :param external_docs_url: Absolute URL of external resources describing      the tag.     :type external_docs_url: str     :param external_docs_description: Description of the external resources      describing the tag.     :type external_docs_description: str     :param tag_id: Identifier of the tag in the form of /tags/{tagId}     :type tag_id: str     :param display_name: Tag name.     :type display_name: str Parameters supplied to the Create TagDescription operation.      :param description: Description of the Tag.     :type description: str     :param external_docs_url: Absolute URL of external resources describing      the tag.     :type external_docs_url: str     :param external_docs_description: Description of the external resources      describing the tag.     :type external_docs_description: str TagResource contract properties.      All required parameters must be populated in order to send to Azure.      :param tag: Required. Tag associated with the resource.     :type tag:      ~azure.mgmt.apimanagement.models.TagTagResourceContractProperties     :param api: Api associated with the tag.     :type api:      ~azure.mgmt.apimanagement.models.ApiTagResourceContractProperties     :param operation: Operation associated with the tag.     :type operation:      ~azure.mgmt.apimanagement.models.OperationTagResourceContractProperties     :param product: Product associated with the tag.     :type product:      ~azure.mgmt.apimanagement.models.ProductTagResourceContractProperties Contract defining the Tag property in the Tag Resource Contract.      :param id: Tag identifier     :type id: str     :param name: Tag Name     :type name: str Tenant Configuration Synchronization State.      :param branch: The name of Git branch.     :type branch: str     :param commit_id: The latest commit Id.     :type commit_id: str     :param is_export: value indicating if last sync was save (true) or deploy      (false) operation.     :type is_export: bool     :param is_synced: value indicating if last synchronization was later than      the configuration change.     :type is_synced: bool     :param is_git_enabled: value indicating whether Git configuration access      is enabled.     :type is_git_enabled: bool     :param sync_date: The date of the latest synchronization. The date      conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by      the ISO 8601 standard.     :type sync_date: datetime     :param configuration_change_date: The date of the latest configuration      change. The date conforms to the following format: `yyyy-MM-ddTHH:mm:ssZ`      as specified by the ISO 8601 standard.     :type configuration_change_date: datetime Terms of service contract properties.      :param text: A terms of service text.     :type text: str     :param enabled: Display terms of service during a sign-up process.     :type enabled: bool     :param consent_required: Ask user for consent to the terms of service.     :type consent_required: bool OAuth acquire token request body parameter (www-url-form-encoded).      All required parameters must be populated in order to send to Azure.      :param name: Required. body parameter name.     :type name: str     :param value: Required. body parameter value.     :type value: str User details.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar id: Resource ID.     :vartype id: str     :ivar name: Resource name.     :vartype name: str     :ivar type: Resource type for API Management resource.     :vartype type: str     :param state: Account state. Specifies whether the user is active or not.      Blocked users are unable to sign into the developer portal or call any      APIs of subscribed products. Default state is Active. Possible values      include: 'active', 'blocked', 'pending', 'deleted'. Default value:      "active" .     :type state: str or ~azure.mgmt.apimanagement.models.UserState     :param note: Optional note about a user set by the administrator.     :type note: str     :param identities: Collection of user identities.     :type identities:      list[~azure.mgmt.apimanagement.models.UserIdentityContract]     :param first_name: First name.     :type first_name: str     :param last_name: Last name.     :type last_name: str     :param email: Email address.     :type email: str     :param registration_date: Date of user registration. The date conforms to      the following format: `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601      standard.     :type registration_date: datetime     :ivar groups: Collection of groups user is part of.     :vartype groups:      list[~azure.mgmt.apimanagement.models.GroupContractProperties] User create details.      All required parameters must be populated in order to send to Azure.      :param state: Account state. Specifies whether the user is active or not.      Blocked users are unable to sign into the developer portal or call any      APIs of subscribed products. Default state is Active. Possible values      include: 'active', 'blocked', 'pending', 'deleted'. Default value:      "active" .     :type state: str or ~azure.mgmt.apimanagement.models.UserState     :param note: Optional note about a user set by the administrator.     :type note: str     :param identities: Collection of user identities.     :type identities:      list[~azure.mgmt.apimanagement.models.UserIdentityContract]     :param email: Required. Email address. Must not be empty and must be      unique within the service instance.     :type email: str     :param first_name: Required. First name.     :type first_name: str     :param last_name: Required. Last name.     :type last_name: str     :param password: <PASSWORD>. If no value is provided, a default      password is generated.     :type password: str     :param app_type: Determines the type of application which send the create      user request. Default is old publisher portal. Possible values include:      'developerPortal'     :type app_type: str or ~azure.mgmt.apimanagement.models.AppType     :param confirmation: Determines the type of confirmation e-mail that will      be sent to the newly created user. Possible values include: 'signup',      'invite'     :type confirmation: str or ~azure.mgmt.apimanagement.models.Confirmation User Entity Base Parameters set.      :param state: Account state. Specifies whether the user is active or not.      Blocked users are unable to sign into the developer portal or call any      APIs of subscribed products. Default state is Active. Possible values      include: 'active', 'blocked', 'pending', 'deleted'. Default value:      "active" .     :type state: str or ~azure.mgmt.apimanagement.models.UserState     :param note: Optional note about a user set by the administrator.     :type note: str     :param identities: Collection of user identities.     :type identities:      list[~azure.mgmt.apimanagement.models.UserIdentityContract] User identity details.      :param provider: Identity provider name.     :type provider: str     :param id: Identifier value within provider.     :type id: str UserIdentityProperties.      :param principal_id: The principal id of user assigned identity.     :type principal_id: str     :param client_id: The client id of user assigned identity.     :type client_id: str Get User Token parameters.      All required parameters must be populated in order to send to Azure.      :param key_type: Required. The Key to be used to generate token for user.      Possible values include: 'primary', 'secondary'. Default value: "primary"      .     :type key_type: str or ~azure.mgmt.apimanagement.models.KeyType     :param expiry: Required. The Expiry time of the Token. Maximum token      expiry time is set to 30 days. The date conforms to the following format:      `yyyy-MM-ddTHH:mm:ssZ` as specified by the ISO 8601 standard.     :type expiry: datetime Get User Token response details.      :param value: Shared Access Authorization token for the User.     :type value: str User update parameters.      :param state: Account state. Specifies whether the user is active or not.      Blocked users are unable to sign into the developer portal or call any      APIs of subscribed products. Default state is Active. Possible values      include: 'active', 'blocked', 'pending', 'deleted'. Default value:      "active" .     :type state: str or ~azure.mgmt.apimanagement.models.UserState     :param note: Optional note about a user set by the administrator.     :type note: str     :param identities: Collection of user identities.     :type identities:      list[~azure.mgmt.apimanagement.models.UserIdentityContract]     :param email: Email address. Must not be empty and must be unique within      the service instance.     :type email: str     :param password: <PASSWORD>.     :type password: str     :param first_name: First name.     :type first_name: str     :param last_name: Last name.     :type last_name: str Configuration of a virtual network to which API Management service is     deployed.      Variables are only populated by the server, and will be ignored when     sending a request.      :ivar vnetid: The virtual network ID. This is typically a GUID. Expect a      null GUID by default.     :vartype vnetid: str     :ivar subnetname: The name of the subnet.     :vartype subnetname: str     :param subnet_resource_id: The full resource ID of a subnet in a virtual      network to deploy the API Management service in.     :type subnet_resource_id: str Properties of server X509Names.      :param name: Common Name of the Certificate.     :type name: str     :param issuer_certificate_thumbprint: Thumbprint for the Issuer of the      Certificate.     :type issuer_certificate_thumbprint: str