{
  "version": "2.0",
  "metadata": {
    "apiVersion": "2018-10-01",
    "endpointPrefix": "appmesh",
    "jsonVersion": "1.1",
    "protocol": "rest-json",
    "serviceFullName": "AWS App Mesh",
    "serviceId": "App Mesh",
    "signatureVersion": "v4",
    "signingName": "appmesh",
    "uid": "appmesh-2018-10-01"
  },
  "operations": {
    "CreateMesh": {
      "name": "CreateMesh",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes",
        "responseCode": 200
      },
      "input": {
        "shape": "CreateMeshInput"
      },
      "output": {
        "shape": "CreateMeshOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "CreateRoute": {
      "name": "CreateRoute",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes",
        "responseCode": 200
      },
      "input": {
        "shape": "CreateRouteInput"
      },
      "output": {
        "shape": "CreateRouteOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "CreateVirtualNode": {
      "name": "CreateVirtualNode",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualNodes",
        "responseCode": 200
      },
      "input": {
        "shape": "CreateVirtualNodeInput"
      },
      "output": {
        "shape": "CreateVirtualNodeOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "CreateVirtualRouter": {
      "name": "CreateVirtualRouter",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualRouters",
        "responseCode": 200
      },
      "input": {
        "shape": "CreateVirtualRouterInput"
      },
      "output": {
        "shape": "CreateVirtualRouterOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "DeleteMesh": {
      "name": "DeleteMesh",
      "http": {
        "method": "DELETE",
        "requestUri": "/meshes/{meshName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DeleteMeshInput"
      },
      "output": {
        "shape": "DeleteMeshOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ResourceInUseException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "DeleteRoute": {
      "name": "DeleteRoute",
      "http": {
        "method": "DELETE",
        "requestUri": "/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes/{routeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DeleteRouteInput"
      },
      "output": {
        "shape": "DeleteRouteOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ResourceInUseException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "DeleteVirtualNode": {
      "name": "DeleteVirtualNode",
      "http": {
        "method": "DELETE",
        "requestUri": "/meshes/{meshName}/virtualNodes/{virtualNodeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DeleteVirtualNodeInput"
      },
      "output": {
        "shape": "DeleteVirtualNodeOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ResourceInUseException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "DeleteVirtualRouter": {
      "name": "DeleteVirtualRouter",
      "http": {
        "method": "DELETE",
        "requestUri": "/meshes/{meshName}/virtualRouters/{virtualRouterName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DeleteVirtualRouterInput"
      },
      "output": {
        "shape": "DeleteVirtualRouterOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ResourceInUseException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "DescribeMesh": {
      "name": "DescribeMesh",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DescribeMeshInput"
      },
      "output": {
        "shape": "DescribeMeshOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "DescribeRoute": {
      "name": "DescribeRoute",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes/{routeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DescribeRouteInput"
      },
      "output": {
        "shape": "DescribeRouteOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "DescribeVirtualNode": {
      "name": "DescribeVirtualNode",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualNodes/{virtualNodeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DescribeVirtualNodeInput"
      },
      "output": {
        "shape": "DescribeVirtualNodeOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "DescribeVirtualRouter": {
      "name": "DescribeVirtualRouter",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualRouters/{virtualRouterName}",
        "responseCode": 200
      },
      "input": {
        "shape": "DescribeVirtualRouterInput"
      },
      "output": {
        "shape": "DescribeVirtualRouterOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "ListMeshes": {
      "name": "ListMeshes",
      "http": {
        "method": "GET",
        "requestUri": "/meshes",
        "responseCode": 200
      },
      "input": {
        "shape": "ListMeshesInput"
      },
      "output": {
        "shape": "ListMeshesOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "ListRoutes": {
      "name": "ListRoutes",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes",
        "responseCode": 200
      },
      "input": {
        "shape": "ListRoutesInput"
      },
      "output": {
        "shape": "ListRoutesOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "ListVirtualNodes": {
      "name": "ListVirtualNodes",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualNodes",
        "responseCode": 200
      },
      "input": {
        "shape": "ListVirtualNodesInput"
      },
      "output": {
        "shape": "ListVirtualNodesOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "ListVirtualRouters": {
      "name": "ListVirtualRouters",
      "http": {
        "method": "GET",
        "requestUri": "/meshes/{meshName}/virtualRouters",
        "responseCode": 200
      },
      "input": {
        "shape": "ListVirtualRoutersInput"
      },
      "output": {
        "shape": "ListVirtualRoutersOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ]
    },
    "UpdateRoute": {
      "name": "UpdateRoute",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualRouter/{virtualRouterName}/routes/{routeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "UpdateRouteInput"
      },
      "output": {
        "shape": "UpdateRouteOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "UpdateVirtualNode": {
      "name": "UpdateVirtualNode",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualNodes/{virtualNodeName}",
        "responseCode": 200
      },
      "input": {
        "shape": "UpdateVirtualNodeInput"
      },
      "output": {
        "shape": "UpdateVirtualNodeOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    },
    "UpdateVirtualRouter": {
      "name": "UpdateVirtualRouter",
      "http": {
        "method": "PUT",
        "requestUri": "/meshes/{meshName}/virtualRouters/{virtualRouterName}",
        "responseCode": 200
      },
      "input": {
        "shape": "UpdateVirtualRouterInput"
      },
      "output": {
        "shape": "UpdateVirtualRouterOutput"
      },
      "errors": [
        {
          "shape": "BadRequestException"
        },
        {
          "shape": "ConflictException"
        },
        {
          "shape": "ForbiddenException"
        },
        {
          "shape": "InternalServerErrorException"
        },
        {
          "shape": "LimitExceededException"
        },
        {
          "shape": "NotFoundException"
        },
        {
          "shape": "ServiceUnavailableException"
        },
        {
          "shape": "TooManyRequestsException"
        }
      ],
      "idempotent": true
    }
  },
  "shapes": {
    "ServiceName": {
      "type": "string"
    },
    "InternalServerErrorException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "InternalServerErrorException",
        "httpStatusCode": 500,
        "fault": true
      }
    },
    "HealthCheckThreshold": {
      "type": "integer",
      "min": 2,
      "max": 10
    },
    "DeleteMeshOutput": {
      "type": "structure",
      "members": {
        "mesh": {
          "shape": "MeshData"
        }
      },
      "payload": "mesh"
    },
    "Long": {
      "type": "long",
      "box": true
    },
    "ForbiddenException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "ForbiddenException",
        "httpStatusCode": 403,
        "senderFault": true
      }
    },
    "UpdateVirtualRouterOutput": {
      "type": "structure",
      "members": {
        "virtualRouter": {
          "shape": "VirtualRouterData"
        }
      },
      "payload": "virtualRouter"
    },
    "MeshStatusCode": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "DELETED",
        "INACTIVE"
      ]
    },
    "PortNumber": {
      "type": "integer",
      "min": 1,
      "max": 65535
    },
    "WeightedTarget": {
      "type": "structure",
      "members": {
        "virtualNode": {
          "shape": "ResourceName"
        },
        "weight": {
          "shape": "PercentInt"
        }
      }
    },
    "VirtualNodeList": {
      "type": "list",
      "member": {
        "shape": "VirtualNodeRef"
      }
    },
    "CreateRouteOutput": {
      "type": "structure",
      "members": {
        "route": {
          "shape": "RouteData"
        }
      },
      "payload": "route"
    },
    "RouteList": {
      "type": "list",
      "member": {
        "shape": "RouteRef"
      }
    },
    "DeleteVirtualNodeInput": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualNodeName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "virtualNodeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualNodeName"
        }
      }
    },
    "ListVirtualRoutersLimit": {
      "type": "integer",
      "box": true,
      "min": 1,
      "max": 100
    },
    "DnsServiceDiscovery": {
      "type": "structure",
      "members": {
        "serviceName": {
          "shape": "ServiceName"
        }
      }
    },
    "ConflictException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "ConflictException",
        "httpStatusCode": 409,
        "senderFault": true
      }
    },
    "HealthCheckIntervalMillis": {
      "type": "long",
      "box": true,
      "min": 5000,
      "max": 300000
    },
    "VirtualNodeRef": {
      "type": "structure",
      "members": {
        "arn": {
          "shape": "Arn"
        },
        "meshName": {
          "shape": "ResourceName"
        },
        "virtualNodeName": {
          "shape": "ResourceName"
        }
      }
    },
    "DescribeRouteOutput": {
      "type": "structure",
      "members": {
        "route": {
          "shape": "RouteData"
        }
      },
      "payload": "route"
    },
    "ServiceDiscovery": {
      "type": "structure",
      "members": {
        "dns": {
          "shape": "DnsServiceDiscovery"
        }
      }
    },
    "MeshStatus": {
      "type": "structure",
      "members": {
        "status": {
          "shape": "MeshStatusCode"
        }
      }
    },
    "VirtualNodeData": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualNodeName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName"
        },
        "metadata": {
          "shape": "ResourceMetadata"
        },
        "spec": {
          "shape": "VirtualNodeSpec"
        },
        "status": {
          "shape": "VirtualNodeStatus"
        },
        "virtualNodeName": {
          "shape": "ResourceName"
        }
      }
    },
    "VirtualNodeSpec": {
      "type": "structure",
      "members": {
        "backends": {
          "shape": "Backends"
        },
        "listeners": {
          "shape": "Listeners"
        },
        "serviceDiscovery": {
          "shape": "ServiceDiscovery"
        }
      }
    },
    "ServiceNames": {
      "type": "list",
      "member": {
        "shape": "ServiceName"
      },
      "max": 10
    },
    "MeshRef": {
      "type": "structure",
      "members": {
        "arn": {
          "shape": "Arn"
        },
        "meshName": {
          "shape": "ResourceName"
        }
      }
    },
    "DescribeVirtualRouterInput": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "DescribeVirtualRouterOutput": {
      "type": "structure",
      "members": {
        "virtualRouter": {
          "shape": "VirtualRouterData"
        }
      },
      "payload": "virtualRouter"
    },
    "LimitExceededException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "LimitExceededException",
        "httpStatusCode": 400,
        "senderFault": true
      }
    },
    "UpdateRouteOutput": {
      "type": "structure",
      "members": {
        "route": {
          "shape": "RouteData"
        }
      },
      "payload": "route"
    },
    "HttpRouteAction": {
      "type": "structure",
      "members": {
        "weightedTargets": {
          "shape": "WeightedTargets"
        }
      }
    },
    "CreateVirtualRouterOutput": {
      "type": "structure",
      "members": {
        "virtualRouter": {
          "shape": "VirtualRouterData"
        }
      },
      "payload": "virtualRouter"
    },
    "HealthCheckTimeoutMillis": {
      "type": "long",
      "box": true,
      "min": 2000,
      "max": 60000
    },
    "CreateVirtualRouterInput": {
      "type": "structure",
      "required": [
        "meshName",
        "spec",
        "virtualRouterName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "spec": {
          "shape": "VirtualRouterSpec"
        },
        "virtualRouterName": {
          "shape": "ResourceName"
        }
      }
    },
    "RouteStatus": {
      "type": "structure",
      "members": {
        "status": {
          "shape": "RouteStatusCode"
        }
      }
    },
    "ListMeshesInput": {
      "type": "structure",
      "members": {
        "limit": {
          "shape": "ListMeshesLimit",
          "location": "querystring",
          "locationName": "limit"
        },
        "nextToken": {
          "shape": "String",
          "location": "querystring",
          "locationName": "nextToken"
        }
      }
    },
    "VirtualRouterStatus": {
      "type": "structure",
      "members": {
        "status": {
          "shape": "VirtualRouterStatusCode"
        }
      }
    },
    "TooManyRequestsException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "TooManyRequestsException",
        "httpStatusCode": 429,
        "senderFault": true
      }
    },
    "ListMeshesOutput": {
      "type": "structure",
      "required": [
        "meshes"
      ],
      "members": {
        "meshes": {
          "shape": "MeshList"
        },
        "nextToken": {
          "shape": "String"
        }
      }
    },
    "DescribeVirtualNodeOutput": {
      "type": "structure",
      "members": {
        "virtualNode": {
          "shape": "VirtualNodeData"
        }
      },
      "payload": "virtualNode"
    },
    "CreateMeshOutput": {
      "type": "structure",
      "members": {
        "mesh": {
          "shape": "MeshData"
        }
      },
      "payload": "mesh"
    },
    "ResourceName": {
      "type": "string",
      "min": 1,
      "max": 255
    },
    "RouteData": {
      "type": "structure",
      "required": [
        "meshName",
        "routeName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName"
        },
        "metadata": {
          "shape": "ResourceMetadata"
        },
        "routeName": {
          "shape": "ResourceName"
        },
        "spec": {
          "shape": "RouteSpec"
        },
        "status": {
          "shape": "RouteStatus"
        },
        "virtualRouterName": {
          "shape": "ResourceName"
        }
      }
    },
    "Arn": {
      "type": "string"
    },
    "NotFoundException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "NotFoundException",
        "httpStatusCode": 404,
        "senderFault": true
      }
    },
    "UpdateVirtualNodeInput": {
      "type": "structure",
      "required": [
        "meshName",
        "spec",
        "virtualNodeName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "spec": {
          "shape": "VirtualNodeSpec"
        },
        "virtualNodeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualNodeName"
        }
      }
    },
    "DeleteRouteInput": {
      "type": "structure",
      "required": [
        "meshName",
        "routeName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "routeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "routeName"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "ServiceUnavailableException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "ServiceUnavailableException",
        "httpStatusCode": 503,
        "fault": true
      }
    },
    "Listeners": {
      "type": "list",
      "member": {
        "shape": "Listener"
      }
    },
    "ListRoutesInput": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualRouterName"
      ],
      "members": {
        "limit": {
          "shape": "ListRoutesLimit",
          "location": "querystring",
          "locationName": "limit"
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "nextToken": {
          "shape": "String",
          "location": "querystring",
          "locationName": "nextToken"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "HttpRoute": {
      "type": "structure",
      "members": {
        "action": {
          "shape": "HttpRouteAction"
        },
        "match": {
          "shape": "HttpRouteMatch"
        }
      }
    },
    "Timestamp": {
      "type": "timestamp"
    },
    "ListRoutesOutput": {
      "type": "structure",
      "required": [
        "routes"
      ],
      "members": {
        "nextToken": {
          "shape": "String"
        },
        "routes": {
          "shape": "RouteList"
        }
      }
    },
    "RouteSpec": {
      "type": "structure",
      "members": {
        "httpRoute": {
          "shape": "HttpRoute"
        }
      }
    },
    "DescribeVirtualNodeInput": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualNodeName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "virtualNodeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualNodeName"
        }
      }
    },
    "VirtualRouterRef": {
      "type": "structure",
      "members": {
        "arn": {
          "shape": "Arn"
        },
        "meshName": {
          "shape": "ResourceName"
        },
        "virtualRouterName": {
          "shape": "ResourceName"
        }
      }
    },
    "VirtualRouterStatusCode": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "DELETED",
        "INACTIVE"
      ]
    },
    "ListVirtualNodesOutput": {
      "type": "structure",
      "required": [
        "virtualNodes"
      ],
      "members": {
        "nextToken": {
          "shape": "String"
        },
        "virtualNodes": {
          "shape": "VirtualNodeList"
        }
      }
    },
    "DeleteVirtualNodeOutput": {
      "type": "structure",
      "members": {
        "virtualNode": {
          "shape": "VirtualNodeData"
        }
      },
      "payload": "virtualNode"
    },
    "UpdateVirtualRouterInput": {
      "type": "structure",
      "required": [
        "meshName",
        "spec",
        "virtualRouterName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "spec": {
          "shape": "VirtualRouterSpec"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "ResourceInUseException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "ResourceInUseException",
        "httpStatusCode": 409,
        "senderFault": true
      }
    },
    "DescribeRouteInput": {
      "type": "structure",
      "required": [
        "meshName",
        "routeName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "routeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "routeName"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "ListVirtualRoutersOutput": {
      "type": "structure",
      "required": [
        "virtualRouters"
      ],
      "members": {
        "nextToken": {
          "shape": "String"
        },
        "virtualRouters": {
          "shape": "VirtualRouterList"
        }
      }
    },
    "CreateVirtualNodeOutput": {
      "type": "structure",
      "members": {
        "virtualNode": {
          "shape": "VirtualNodeData"
        }
      },
      "payload": "virtualNode"
    },
    "DeleteVirtualRouterOutput": {
      "type": "structure",
      "members": {
        "virtualRouter": {
          "shape": "VirtualRouterData"
        }
      },
      "payload": "virtualRouter"
    },
    "ListRoutesLimit": {
      "type": "integer",
      "box": true,
      "min": 1,
      "max": 100
    },
    "PortProtocol": {
      "type": "string",
      "enum": [
        "http",
        "tcp"
      ]
    },
    "MeshList": {
      "type": "list",
      "member": {
        "shape": "MeshRef"
      }
    },
    "ResourceMetadata": {
      "type": "structure",
      "members": {
        "arn": {
          "shape": "Arn"
        },
        "createdAt": {
          "shape": "Timestamp"
        },
        "lastUpdatedAt": {
          "shape": "Timestamp"
        },
        "uid": {
          "shape": "String"
        },
        "version": {
          "shape": "Long"
        }
      }
    },
    "CreateMeshInput": {
      "type": "structure",
      "required": [
        "meshName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName"
        }
      }
    },
    "PortMapping": {
      "type": "structure",
      "members": {
        "port": {
          "shape": "PortNumber"
        },
        "protocol": {
          "shape": "PortProtocol"
        }
      }
    },
    "VirtualNodeStatusCode": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "DELETED",
        "INACTIVE"
      ]
    },
    "DeleteVirtualRouterInput": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "VirtualRouterSpec": {
      "type": "structure",
      "members": {
        "serviceNames": {
          "shape": "ServiceNames"
        }
      }
    },
    "UpdateRouteInput": {
      "type": "structure",
      "required": [
        "meshName",
        "routeName",
        "spec",
        "virtualRouterName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "routeName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "routeName"
        },
        "spec": {
          "shape": "RouteSpec"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "PercentInt": {
      "type": "integer",
      "min": 0,
      "max": 100
    },
    "ListMeshesLimit": {
      "type": "integer",
      "box": true,
      "min": 1,
      "max": 100
    },
    "DescribeMeshInput": {
      "type": "structure",
      "required": [
        "meshName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        }
      }
    },
    "DescribeMeshOutput": {
      "type": "structure",
      "members": {
        "mesh": {
          "shape": "MeshData"
        }
      },
      "payload": "mesh"
    },
    "VirtualRouterData": {
      "type": "structure",
      "required": [
        "meshName",
        "virtualRouterName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName"
        },
        "metadata": {
          "shape": "ResourceMetadata"
        },
        "spec": {
          "shape": "VirtualRouterSpec"
        },
        "status": {
          "shape": "VirtualRouterStatus"
        },
        "virtualRouterName": {
          "shape": "ResourceName"
        }
      }
    },
    "VirtualRouterList": {
      "type": "list",
      "member": {
        "shape": "VirtualRouterRef"
      }
    },
    "Listener": {
      "type": "structure",
      "members": {
        "healthCheck": {
          "shape": "HealthCheckPolicy"
        },
        "portMapping": {
          "shape": "PortMapping"
        }
      }
    },
    "String": {
      "type": "string"
    },
    "HealthCheckPolicy": {
      "type": "structure",
      "required": [
        "healthyThreshold",
        "intervalMillis",
        "protocol",
        "timeoutMillis",
        "unhealthyThreshold"
      ],
      "members": {
        "healthyThreshold": {
          "shape": "HealthCheckThreshold"
        },
        "intervalMillis": {
          "shape": "HealthCheckIntervalMillis"
        },
        "path": {
          "shape": "String"
        },
        "port": {
          "shape": "PortNumber"
        },
        "protocol": {
          "shape": "PortProtocol"
        },
        "timeoutMillis": {
          "shape": "HealthCheckTimeoutMillis"
        },
        "unhealthyThreshold": {
          "shape": "HealthCheckThreshold"
        }
      }
    },
    "ListVirtualRoutersInput": {
      "type": "structure",
      "required": [
        "meshName"
      ],
      "members": {
        "limit": {
          "shape": "ListVirtualRoutersLimit",
          "location": "querystring",
          "locationName": "limit"
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "nextToken": {
          "shape": "String",
          "location": "querystring",
          "locationName": "nextToken"
        }
      }
    },
    "CreateVirtualNodeInput": {
      "type": "structure",
      "required": [
        "meshName",
        "spec",
        "virtualNodeName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "spec": {
          "shape": "VirtualNodeSpec"
        },
        "virtualNodeName": {
          "shape": "ResourceName"
        }
      }
    },
    "BadRequestException": {
      "type": "structure",
      "members": {
        "message": {
          "shape": "String"
        }
      },
      "exception": true,
      "error": {
        "code": "BadRequestException",
        "httpStatusCode": 400,
        "senderFault": true
      }
    },
    "MeshData": {
      "type": "structure",
      "required": [
        "meshName",
        "metadata"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName"
        },
        "metadata": {
          "shape": "ResourceMetadata"
        },
        "status": {
          "shape": "MeshStatus"
        }
      }
    },
    "ListVirtualNodesLimit": {
      "type": "integer",
      "box": true,
      "min": 1,
      "max": 100
    },
    "WeightedTargets": {
      "type": "list",
      "member": {
        "shape": "WeightedTarget"
      }
    },
    "DeleteMeshInput": {
      "type": "structure",
      "required": [
        "meshName"
      ],
      "members": {
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        }
      }
    },
    "HttpRouteMatch": {
      "type": "structure",
      "members": {
        "prefix": {
          "shape": "String"
        }
      }
    },
    "DeleteRouteOutput": {
      "type": "structure",
      "members": {
        "route": {
          "shape": "RouteData"
        }
      },
      "payload": "route"
    },
    "Backends": {
      "type": "list",
      "member": {
        "shape": "ServiceName"
      }
    },
    "CreateRouteInput": {
      "type": "structure",
      "required": [
        "meshName",
        "routeName",
        "spec",
        "virtualRouterName"
      ],
      "members": {
        "clientToken": {
          "shape": "String",
          "idempotencyToken": true
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "routeName": {
          "shape": "ResourceName"
        },
        "spec": {
          "shape": "RouteSpec"
        },
        "virtualRouterName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "virtualRouterName"
        }
      }
    },
    "VirtualNodeStatus": {
      "type": "structure",
      "members": {
        "status": {
          "shape": "VirtualNodeStatusCode"
        }
      }
    },
    "ListVirtualNodesInput": {
      "type": "structure",
      "required": [
        "meshName"
      ],
      "members": {
        "limit": {
          "shape": "ListVirtualNodesLimit",
          "location": "querystring",
          "locationName": "limit"
        },
        "meshName": {
          "shape": "ResourceName",
          "location": "uri",
          "locationName": "meshName"
        },
        "nextToken": {
          "shape": "String",
          "location": "querystring",
          "locationName": "nextToken"
        }
      }
    },
    "RouteRef": {
      "type": "structure",
      "members": {
        "arn": {
          "shape": "Arn"
        },
        "meshName": {
          "shape": "ResourceName"
        },
        "routeName": {
          "shape": "ResourceName"
        },
        "virtualRouterName": {
          "shape": "ResourceName"
        }
      }
    },
    "RouteStatusCode": {
      "type": "string",
      "enum": [
        "ACTIVE",
        "DELETED",
        "INACTIVE"
      ]
    },
    "UpdateVirtualNodeOutput": {
      "type": "structure",
      "members": {
        "virtualNode": {
          "shape": "VirtualNodeData"
        }
      },
      "payload": "virtualNode"
    }
  }
}