{
  "typeName" : "AWS::ApiGateway::DomainName",
  "description" : "The ``AWS::ApiGateway::DomainName`` resource specifies a public custom domain name for your API in API Gateway.\n To create a custom domain name for private APIs, use [AWS::ApiGateway::DomainNameV2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainnamev2.html).\n You can use a custom domain name to provide a URL that's more intuitive and easier to recall. For more information about using custom domain names, see [Set up Custom Domain Name for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) in the *API Gateway Developer Guide*.",
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-rpdk.git",
  "definitions" : {
    "EndpointConfiguration" : {
      "type" : "object",
      "properties" : {
        "Types" : {
          "type" : "array",
          "items" : {
            "type" : "string"
          },
          "description" : ""
        },
        "IpAddressType" : {
          "type" : "string",
          "description" : ""
        }
      },
      "additionalProperties" : false,
      "description" : "The ``EndpointConfiguration`` property type specifies the endpoint types and IP address types of an Amazon API Gateway domain name.\n ``EndpointConfiguration`` is a property of the [AWS::ApiGateway::DomainName](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html) resource."
    },
    "MutualTlsAuthentication" : {
      "type" : "object",
      "properties" : {
        "TruststoreUri" : {
          "type" : "string",
          "description" : ""
        },
        "TruststoreVersion" : {
          "type" : "string",
          "description" : ""
        }
      },
      "additionalProperties" : false,
      "description" : ""
    },
    "Tag" : {
      "type" : "object",
      "properties" : {
        "Key" : {
          "type" : "string",
          "description" : "A string you can use to assign a value. The combination of tag keys and values can help you organize and categorize your resources."
        },
        "Value" : {
          "type" : "string",
          "description" : "The value for the specified tag key."
        }
      },
      "additionalProperties" : false,
      "description" : "An array of key-value pairs to apply to this resource.\n For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html)."
    }
  },
  "properties" : {
    "DomainName" : {
      "type" : "string",
      "description" : ""
    },
    "DomainNameArn" : {
      "type" : "string",
      "description" : ""
    },
    "DistributionDomainName" : {
      "type" : "string",
      "description" : ""
    },
    "DistributionHostedZoneId" : {
      "type" : "string",
      "description" : ""
    },
    "EndpointConfiguration" : {
      "$ref" : "#/definitions/EndpointConfiguration",
      "description" : "The endpoint configuration of this DomainName showing the endpoint types and IP address types of the domain name."
    },
    "MutualTlsAuthentication" : {
      "$ref" : "#/definitions/MutualTlsAuthentication",
      "description" : ""
    },
    "RegionalDomainName" : {
      "type" : "string",
      "description" : ""
    },
    "RegionalHostedZoneId" : {
      "type" : "string",
      "description" : ""
    },
    "CertificateArn" : {
      "type" : "string",
      "description" : ""
    },
    "RegionalCertificateArn" : {
      "type" : "string",
      "description" : ""
    },
    "OwnershipVerificationCertificateArn" : {
      "type" : "string",
      "description" : "The ARN of the public certificate issued by ACM to validate ownership of your custom domain. Only required when configuring mutual TLS and using an ACM imported or private CA certificate ARN as the RegionalCertificateArn."
    },
    "SecurityPolicy" : {
      "type" : "string",
      "description" : ""
    },
    "EndpointAccessMode" : {
      "type" : "string",
      "description" : ""
    },
    "RoutingMode" : {
      "type" : "string",
      "description" : "",
      "default" : "BASE_PATH_MAPPING_ONLY",
      "enum" : [ "BASE_PATH_MAPPING_ONLY", "ROUTING_RULE_THEN_BASE_PATH_MAPPING", "ROUTING_RULE_ONLY" ]
    },
    "Tags" : {
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Tag"
      },
      "description" : ""
    }
  },
  "tagging" : {
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "cloudFormationSystemTags" : true,
    "tagProperty" : "/properties/Tags"
  },
  "additionalProperties" : false,
  "primaryIdentifier" : [ "/properties/DomainName" ],
  "createOnlyProperties" : [ "/properties/DomainName" ],
  "readOnlyProperties" : [ "/properties/DomainNameArn", "/properties/RegionalHostedZoneId", "/properties/DistributionDomainName", "/properties/RegionalDomainName", "/properties/DistributionHostedZoneId" ],
  "handlers" : {
    "create" : {
      "permissions" : [ "apigateway:POST", "apigateway:PUT", "apigateway:GET" ]
    },
    "read" : {
      "permissions" : [ "apigateway:GET" ]
    },
    "update" : {
      "permissions" : [ "apigateway:GET", "apigateway:PUT", "apigateway:PATCH" ]
    },
    "delete" : {
      "permissions" : [ "apigateway:GET", "apigateway:DELETE" ]
    },
    "list" : {
      "permissions" : [ "apigateway:GET" ]
    }
  }
}