{
  "swagger": "2.0",
  "info": {
    "title": "Webscale APIs",
    "version": "2.0.3"
  },
  "host": "api.webscale.com",
  "schemes": [
    "https"
  ],
  "basePath": "/v2",
  "produces": [
    "application/json"
  ],
  "paths": {
    "/accounts": {
      "get": {
        "summary": "Get accounts",
        "description": "Will return all the account resources that the call is authorized to view.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Account"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new account.",
        "description": "Creates a new account and returns the definition.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "accounts"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The account definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AccountPost"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Account"
            }
          }
        }
      }
    },
    "/accounts/{id}": {
      "get": {
        "summary": "Get an account",
        "description": "Will return the account resource requested.\n",
        "tags": [
          "accounts"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Account"
            }
          }
        }
      },
      "patch": {
        "summary": "Update an account",
        "description": "",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The account parameters to update.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AccountPatch"
            }
          }
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The account was successfully updated.",
            "schema": {
              "$ref": "#/definitions/Account"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an account",
        "description": "Deletes the requested account.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The account was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/Account"
            }
          }
        }
      }
    },
    "/accounts/{id}/entitlements": {
      "get": {
        "summary": "Get the entitlements created by this account",
        "description": "Entitlements are used to keep a track of all the resources allocated to an account.",
        "tags": [
          "entitlements"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Entitlement"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Creates a new entitlement in this account",
        "description": "Creates a new entitlement and returns the definition",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The entitlement definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/EntitlementPost"
            }
          }
        ],
        "tags": [
          "entitlements"
        ],
        "responses": {
          "200": {
            "description": "The entitlements was successfully created",
            "schema": {
              "$ref": "#/definitions/Entitlement"
            }
          }
        }
      }
    },
    "/accounts/{account_id}/entitlements/{id}": {
      "get": {
        "summary": "Get a specific entitlement",
        "description": "Entitlements are used to keep a track of all the resources allocated to an account.",
        "tags": [
          "entitlements"
        ],
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Entitlement id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/Entitlement"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches a specified Entitlement",
        "description": "Updates the Entitlement and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Entitlement id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The entitlement definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/EntitlementPatch"
            }
          }
        ],
        "tags": [
          "entitlements"
        ],
        "responses": {
          "200": {
            "description": "The entitlement was successfully updated",
            "schema": {
              "$ref": "#/definitions/Entitlement"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an entitlement",
        "description": "The entitlement must belong to the current account",
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Entitlement id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "entitlements"
        ],
        "responses": {
          "200": {
            "description": "The entitlement was successfully deleted",
            "schema": {
              "$ref": "#/definitions/Entitlement"
            }
          }
        }
      }
    },
    "/accounts/{id}/billing": {
      "get": {
        "summary": "Get billing information for an account",
        "description": "The billing information contains invoices and payments.\n",
        "tags": [
          "accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Billing"
              }
            }
          }
        }
      }
    },
    "/accounts/{id}/group-invitations": {
      "get": {
        "summary": "Get the group invitations sent by this account",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/GroupInvitation"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Invite a user to a group",
        "description": "Invites a user to a group and returns the invitation",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/GroupInvitationPost"
            }
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully sent.",
            "schema": {
              "$ref": "#/definitions/GroupInvitation"
            }
          }
        }
      }
    },
    "/accounts/{id}/group-invitations/{invitation_id}": {
      "get": {
        "summary": "Get a specific group invitation sent by this account",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/GroupInvitation"
            }
          }
        }
      },
      "patch": {
        "summary": "Allows a specified invitation to be sent again",
        "description": "Reinvite the user to a group and return the invitation",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The group invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/GroupInvitationConfiguration"
            }
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The group invitation was successfully updated",
            "schema": {
              "$ref": "#/definitions/GroupInvitation"
            }
          }
        }
      },
      "delete": {
        "summary": "Revoke a sent invitation",
        "description": "Revoke a user's invitation to a group and return the invitation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully deleted",
            "schema": {
              "$ref": "#/definitions/GroupInvitation"
            }
          }
        }
      }
    },
    "/accounts/{id}/groups": {
      "get": {
        "summary": "Retrieves the groups created in this account",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Group"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new group in this account",
        "description": "Creates a new group and returns the definition",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The group definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/GroupConfigurationPost"
            }
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully created",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          }
        }
      }
    },
    "/accounts/{id}/groups/{group_id}": {
      "get": {
        "summary": "Get a specific group",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          }
        }
      },
      "patch": {
        "summary": "Updates a specified group",
        "description": "Updates the group and returns the updated definition",
        "consumes": [
          "application/json",
          "application/json-patch+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The group definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/GroupConfiguration"
            }
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully updated",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a group",
        "description": "The group must belong to the account into which the user is authenticated",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "groups"
        ],
        "responses": {
          "200": {
            "description": "The group was successfully deleted",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          }
        }
      }
    },
    "/accounts/{id}/roles": {
      "get": {
        "summary": "Get the roles created by this account",
        "description": "Roles can be granted to users and used to limit access to account resources",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Role"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new role in this account",
        "description": "Creates a new role and returns the definition",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The role definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RoleConfigurationPost"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully created",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      }
    },
    "/accounts/{id}/roles/{role_id}": {
      "get": {
        "summary": "Get a specific role",
        "description": "Roles can be granted to users and used to limit access to account resources",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "role_id",
            "in": "path",
            "description": "Role id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches a specified role",
        "description": "Updates the role and returns the updated definition",
        "consumes": [
          "application/json",
          "application/json-patch+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "role_id",
            "in": "path",
            "description": "Role id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The role definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RoleConfiguration"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully updated",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a role",
        "description": "The role must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "role_id",
            "in": "path",
            "description": "Role id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully deleted",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      }
    },
    "/accounts/{id}/invitations": {
      "get": {
        "summary": "Get the invitations created by this account",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/RoleInvitation"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new invitation from this account",
        "description": "Creates a new invitation and returns the definition",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RoleInvitationPost"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully created",
            "schema": {
              "$ref": "#/definitions/RoleInvitation"
            }
          }
        }
      }
    },
    "/accounts/{id}/invitations/{invitation_id}": {
      "get": {
        "summary": "Get a specific invitation created by this account",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/RoleInvitation"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches a specified invitation",
        "description": "Updates the invitation and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RoleInvitationConfiguration"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The role was successfully updated",
            "schema": {
              "$ref": "#/definitions/RoleInvitation"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a invitation",
        "description": "The invitation must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully deleted",
            "schema": {
              "$ref": "#/definitions/RoleInvitation"
            }
          }
        }
      }
    },
    "/accounts/{id}/service-users": {
      "get": {
        "summary": "Get the service users created by this account",
        "description": "Service users are used to permit or deny access to specific APIs.",
        "tags": [
          "accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ServiceUser"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Creates a new service user in this account.",
        "description": "Creates a new service user and returns the definition.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The service user definition",
            "schema": {
              "$ref": "#/definitions/ServiceUserConfiguration"
            }
          }
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The service user was successfully created",
            "schema": {
              "$ref": "#/definitions/ServiceUser"
            }
          }
        }
      }
    },
    "/accounts/{account_id}/service-users/{id}": {
      "get": {
        "summary": "Get a specific service user.",
        "description": "Service users are used to allow access to specific APIs.",
        "tags": [
          "accounts"
        ],
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/ServiceUser"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches a specified service user.",
        "description": "Updates the service user and returns the updated definition.",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The service user definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ServiceUserConfiguration"
            }
          }
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The service user was successfully updated",
            "schema": {
              "$ref": "#/definitions/ServiceUser"
            }
          }
        }
      },
      "delete": {
        "summary": "Deletes the service user.",
        "description": "Deletes the service user.",
        "parameters": [
          {
            "name": "account_id",
            "in": "path",
            "description": "Account id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "accounts"
        ],
        "responses": {
          "200": {
            "description": "The service user was successfully deleted",
            "schema": {
              "$ref": "#/definitions/ServiceUser"
            }
          }
        }
      }
    },
    "/address-sets": {
      "get": {
        "summary": "Get the configurations of all address sets in this account",
        "description": "Returns all the address sets associated with the caller's account.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The address sets were successfully retrieved.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AddressSet"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new address set in this account",
        "description": "Creates a new address set and returns the definition",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The address set definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AddressSetPost"
            }
          }
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The address sets was successfully created",
            "schema": {
              "$ref": "#/definitions/AddressSet"
            }
          }
        }
      }
    },
    "/address-sets/{id}": {
      "get": {
        "summary": "Get the configuration of the specified address set",
        "description": "Retrieves an address set definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Address set id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The address set was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/AddressSet"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an address set",
        "description": "The address must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Address set id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The address set was successfully deleted",
            "schema": {
              "$ref": "#/definitions/AddressSet"
            }
          }
        }
      },
      "patch": {
        "summary": "Update an address set in this account",
        "description": "Updates the address set and returns the updated definition",
        "consumes": [
          "application/json",
          "application/json-patch+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Address set id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The address set definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AddressSetPatch"
            }
          }
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The address sets was successfully updated",
            "schema": {
              "$ref": "#/definitions/AddressSet"
            }
          }
        }
      }
    },
    "/address-sets/{id}/addresses": {
      "get": {
        "summary": "Get the addresses from the specified address set.",
        "description": "Retrieves all address entries contained within the address set. Includes addresses from any and all included sets",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Address set id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "address-sets"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AddressSetEntry"
              }
            }
          }
        }
      }
    },
    "/address-sets/{id}/metrics": {
      "get": {
        "summary": "Get requested metrics for an address set",
        "description": "Returns requested metrics for an address set.\n",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Address set id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "names",
            "in": "query",
            "description": "A comma-separated list of metrics names. Allowed metric names: entries_added, entries_extended, entries_expired, entries_deleted",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/resolution"
          },
          {
            "$ref": "#/parameters/summarize"
          }
        ],
        "responses": {
          "200": {
            "description": "Metrics for the address set have been returned successfully.",
            "schema": {
              "$ref": "#/definitions/Metrics"
            }
          }
        }
      }
    },
    "/address-sets/metrics": {
      "get": {
        "summary": "Get requested metrics for all address sets for the current account",
        "description": "Returns requested metrics for all address sets for the current account.\n",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "name": "names",
            "in": "query",
            "description": "A comma separated list of metrics names. Allowed metric names: entries_added, entries_extended, entries_expired, entries_deleted",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/resolution"
          },
          {
            "$ref": "#/parameters/summarize"
          }
        ],
        "responses": {
          "200": {
            "description": "Metrics for the address set have been returned successfully.",
            "schema": {
              "$ref": "#/definitions/Metrics"
            }
          }
        }
      }
    },
    "/tests": {
      "get": {
        "description": "Get all tests created for this account",
        "tags": [
          "application-test"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ApplicationTest"
              }
            }
          }
        }
      },
      "post": {
        "description": "Run a test with given configuration",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The test to run",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ApplicationTestPost"
            }
          }
        ],
        "tags": [
          "application-test"
        ],
        "responses": {
          "200": {
            "description": "The test was successfully started",
            "schema": {
              "$ref": "#/definitions/ApplicationTest"
            }
          }
        }
      }
    },
    "/tests/{id}": {
      "get": {
        "description": "If the accept header is 'application/x-tar+x-bzip2', a test's configuration is returned. Otherwise, the test's metadata is returned",
        "tags": [
          "application-test"
        ],
        "parameters": [
          {
            "$ref": "#/parameters/id"
          }
        ],
        "produces": [
          "application/json",
          "application/x-tar+x-bzip2"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/ApplicationTest"
            }
          }
        }
      },
      "patch": {
        "description": "Edits a test in the given account",
        "consumes": [
          "application/json",
          "application/x-tar",
          "application/zip",
          "application/x-tar+gzip",
          "application/x-tar+x-bzip2",
          "application/x-bzip2",
          "application/x-gzip"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of an application test",
            "required": true,
            "type": "string",
            "pattern": "^[a-z]([-a-z0-9]*[a-z0-9])?$",
            "maxLength": 50
          },
          {
            "name": "desc",
            "in": "formData",
            "required": false,
            "description": "A description of the test",
            "type": "string"
          },
          {
            "name": "file",
            "in": "formData",
            "description": "Test configuration file",
            "type": "file"
          }
        ],
        "tags": [
          "application-test"
        ],
        "responses": {
          "200": {
            "description": "The test was successfully created",
            "schema": {
              "$ref": "#/definitions/ApplicationTest"
            }
          }
        }
      },
      "put": {
        "description": "Create a test in the given account",
        "consumes": [
          "application/json",
          "application/x-tar",
          "application/zip",
          "application/x-tar+gzip",
          "application/x-tar+x-bzip2",
          "application/x-bzip2",
          "application/x-gzip"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of an application test",
            "required": true,
            "type": "string",
            "pattern": "^[a-z]([-a-z0-9]*[a-z0-9])?$",
            "maxLength": 50
          },
          {
            "name": "desc",
            "in": "formData",
            "required": false,
            "description": "A description of the test",
            "type": "string"
          },
          {
            "name": "file",
            "in": "formData",
            "description": "Test configuration file",
            "required": true,
            "type": "file"
          }
        ],
        "tags": [
          "application-test"
        ],
        "responses": {
          "200": {
            "description": "The test was successfully created",
            "schema": {
              "$ref": "#/definitions/ApplicationTest"
            }
          }
        }
      },
      "delete": {
        "description": "Delete a test",
        "parameters": [
          {
            "$ref": "#/parameters/id"
          }
        ],
        "tags": [
          "application-test"
        ],
        "responses": {
          "200": {
            "description": "The test was successfully deleted",
            "schema": {
              "$ref": "#/definitions/ApplicationTest"
            }
          }
        }
      }
    },
    "/applications": {
      "get": {
        "summary": "Get applications",
        "description": "Will return all the application resources that the caller is authorized to view.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Application"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create an application",
        "description": "",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The application definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ApplicationPost"
            }
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The application was successfully created.",
            "schema": {
              "$ref": "#/definitions/Application"
            }
          }
        }
      }
    },
    "/applications/{id}": {
      "get": {
        "summary": "Describe an application",
        "description": "Retrieve an application resource.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The application was successfully retrieved.",
            "schema": {
              "$ref": "#/definitions/Application"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an application",
        "description": "An application must be in the stopped state to be deleted.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call application was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/Application"
            }
          }
        }
      },
      "patch": {
        "summary": "Update an application",
        "description": "",
        "consumes": [
          "application/json",
          "application/json-patch+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The application definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ApplicationPatch"
            }
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The application was successfully updated.",
            "schema": {
              "$ref": "#/definitions/Application"
            }
          },
          "201": {
            "description": "A task was created to patch the application.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          }
        }
      }
    },
    "/applications/{app_id}/actions": {
      "get": {
        "summary": "Get all app actions",
        "description": "Get all actions for an application. An action is an operation that may be performed on an application by an authorized operator",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/Actions"
            }
          }
        }
      },
      "post": {
        "summary": "Create an app action",
        "description": "Create a new action for an application. An action is an operation that may be performed on an application by an authorized operator",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The action definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Action"
            }
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The action was successfully created",
            "schema": {
              "$ref": "#/definitions/Action"
            }
          }
        }
      }
    },
    "/applications/{app_id}/actions/{action_id}": {
      "get": {
        "summary": "Get a single app action",
        "description": "Retrieve an single application action",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "action_id",
            "in": "path",
            "description": "Action id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The action was successfully retrieved.",
            "schema": {
              "$ref": "#/definitions/Action"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an app action",
        "description": "Delete one application action",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "action_id",
            "in": "path",
            "description": "Action id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The action was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/Action"
            }
          }
        }
      },
      "patch": {
        "summary": "Update an app action",
        "description": "Update one application action",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "action_id",
            "in": "path",
            "description": "Action id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The action definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ActionConfiguration"
            }
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The action was successfully updated.",
            "schema": {
              "$ref": "#/definitions/Action"
            }
          }
        }
      }
    },
    "/applications/{id}/logs": {
      "get": {
        "summary": "Get application logs",
        "description": "Returns an endpoint for the requested application logs.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "type": "string",
            "description": "The type of logs to be returned. Available options are access, pageviews, csp-reports, and cdn.",
            "required": false,
            "enum": [
              "access",
              "pageviews",
              "csp-reports",
              "cdn"
            ],
            "default": "access"
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/format"
          },
          {
            "name": "select",
            "in": "query",
            "description": "A comma separated list of fields to be returned in the result set. Field names that can be used are:  arrival, bytes_in, bytes_out, cache_control, cache_source, completed, country, delivery_status, elapsed, internal_transport_latency, labels, load_id, location, proxy_address, peer_address, queue_latency, range, referrer, request_address, request_id, request_method, request_host, request_port, request_path, request_protocol, request_query, request_url, response_content_type, server_address, server_latency, status_code, session_id, status_code_and_url, threat, tls_cipher, tls_version, ttfb, useragent, useragent_device, useragent_name, useragent_os, webcontrols",
            "required": false,
            "type": "string"
          },
          {
            "$ref": "#/parameters/filter"
          },
          {
            "$ref": "#/parameters/start"
          },
          {
            "$ref": "#/parameters/order"
          },
          {
            "$ref": "#/parameters/groupby"
          },
          {
            "$ref": "#/parameters/groupfilters"
          },
          {
            "$ref": "#/parameters/grouplimit"
          },
          {
            "$ref": "#/parameters/groupselect"
          },
          {
            "$ref": "#/parameters/grouporder"
          }
        ],
        "tags": [
          "logs"
        ],
        "responses": {
          "200": {
            "description": "A CSV or a JSON document containing the application access logs. The fields included in the response depend on the parameters specified in the request.",
            "schema": {
              "$ref": "#/definitions/ApplicationLog"
            }
          }
        }
      },
      "post": {
        "summary": "Submit custom logs",
        "description": "Submit custom logs.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "type": "string",
            "description": "The type of log being submitted. Must be 'custom'.",
            "required": false,
            "enum": [
              "custom"
            ],
            "default": "custom"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The log(s) to be submitted.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ApplicationPost_logs"
            }
          }
        ],
        "tags": [
          "logs"
        ],
        "responses": {
          "200": {
            "description": "Successfully submitted.",
            "schema": {
              "type": "array",
              "description": "IDs of log or logs that were successfully submitted",
              "items": {
                "$ref": "#/definitions/CustomLogId"
              }
            }
          }
        }
      }
    },
    "/applications/{id}/metrics": {
      "get": {
        "summary": "Get metrics for an application",
        "description": "Will return all the metrics for the application based on various parameters.\n",
        "tags": [
          "metrics"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "names",
            "in": "query",
            "description": "A comma separated list of metrics names. Possible series names associated with an application layer are: active_requests, active_sessions, avg_session_length, bytes_in, bytes_in_per_second, bytes_out, bytes_out_per_second, cache_hits, cache_misses, cache_sources, cdn_bytes_in, cdn_bytes_out, cdn_response_summary, countries, delivery_status, edge_locations, edge_response_time, edge_response_types, edge_status_codes, edge_ttfb, edge_useragent_device, edge_useragent_name, edge_useragent_os, page_load_binned, page_load_time, page_views, rejected_requests, req_time, requests, requests_per_second, response_time, response_time_lower, response_time_upper, status_codes, suspended_requests, useragent_device, useragent_name, useragent_os, waf_hits, webcontrol_hits",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/resolution"
          },
          {
            "$ref": "#/parameters/summarize"
          }
        ],
        "responses": {
          "200": {
            "description": "Metrics for the application have been returned successfully.",
            "schema": {
              "$ref": "#/definitions/Metrics"
            }
          }
        }
      }
    },
    "/applications/{app_id}/pagecontrols": {
      "get": {
        "summary": "Page controls for an application",
        "description": "Returns all page controls for an application",
        "tags": [
          "applications"
        ],
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "filter",
            "in": "query",
            "description": "An optional filter that can be provided. An empty string asks for every page control, including deleted controls.",
            "required": false,
            "type": "string",
            "pattern": "^$"
          },
          {
            "name": "attributes",
            "in": "query",
            "description": "A comma-separated list of attributes to be returned for page controls. Using a prefix of + or - respectively, will add or remove an attribute from the default set",
            "required": false,
            "type": "string",
            "pattern": "^([-+][a-z0-9_]+)(,[-+][a-z0-9_]+)*$"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "description": "Page controls in the order of processing",
              "items": {
                "$ref": "#/definitions/PageControl"
              }
            }
          }
        }
      }
    },
    "/applications/{app_id}/pagecontrols/{id}": {
      "get": {
        "summary": "A page control for an application",
        "description": "Returns the requested page control",
        "tags": [
          "applications"
        ],
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Page control id",
            "required": true,
            "type": "string",
            "pattern": "^\\d+$"
          },
          {
            "name": "attributes",
            "in": "query",
            "description": "A comma-separated list of attributes to be returned for the page control. Using a prefix of + or - respectively, will add or remove an attribute from the default set",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/PageControl"
            }
          }
        }
      }
    },
    "/applications/{app_id}/webcontrols": {
      "get": {
        "summary": "Web controls for an application",
        "description": "Returns all web controls for an application",
        "tags": [
          "applications"
        ],
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "filter",
            "in": "query",
            "description": "An optional filter that can be provided. An empty string asks for every web control, including deleted controls.",
            "required": false,
            "type": "string",
            "pattern": "^$"
          },
          {
            "name": "attributes",
            "in": "query",
            "description": "A comma-separated list of attributes to be returned for web controls. Using a prefix of + or - respectively, will add or remove an attribute from the default set",
            "required": false,
            "type": "string",
            "pattern": "^([-+][a-z0-9_]+)(,[-+][a-z0-9_]+)*$"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "description": "Web controls in the order of processing",
              "items": {
                "$ref": "#/definitions/WebControl"
              }
            }
          }
        }
      }
    },
    "/applications/{app_id}/webcontrols/{id}": {
      "get": {
        "summary": "A web control for an application",
        "description": "Returns the requested web control",
        "tags": [
          "applications"
        ],
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Web control id",
            "required": true,
            "type": "string",
            "pattern": "^\\d+$"
          },
          {
            "name": "attributes",
            "in": "query",
            "description": "A comma-separated list of attributes to be returned for the web control. Using a prefix of + or - respectively, will add or remove an attribute from the default set",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/WebControl"
            }
          }
        }
      }
    },
    "/applications/{id}/subscriptions/{subscription_id}": {
      "delete": {
        "summary": "Deleting a subscription for an application",
        "description": "Deletes a subscription from application",
        "tags": [
          "subscriptions"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "name": "subscription_id",
            "in": "path",
            "description": "Subscription id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The subscription was deleted.",
            "schema": {
              "$ref": "#/definitions/Subscription"
            }
          }
        }
      }
    },
    "/applications/{id}/subscriptions": {
      "post": {
        "summary": "Creating a subscription for an application",
        "description": "Only one subscription for a primary plan can be active at a time, and on creating a new primary subscription the currently active primary subscription will be removed.\n",
        "tags": [
          "subscriptions"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "description": "The subscription id used for upgrading",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ApplicationPost_subscriptions"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The subscription was successfully updated.",
            "schema": {
              "$ref": "#/definitions/Subscription"
            }
          }
        }
      }
    },
    "/applications/{id}/waflog": {
      "get": {
        "summary": "Get WAF logs for an application",
        "description": "Returns a download URL endpoint for the requested application waflogs.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          }
        ],
        "tags": [
          "logs"
        ],
        "responses": {
          "200": {
            "description": "A URL for the request application waflogs.",
            "schema": {
              "$ref": "#/definitions/ApplicationWafLog"
            }
          }
        }
      }
    },
    "/applications/{id}/cache": {
      "put": {
        "summary": "Clear application cache",
        "description": "The application cache endpoint clears the application cache.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "202": {
            "description": "A task was created to invalidate the cache.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          }
        }
      }
    },
    "/applications/{id}/queue": {
      "put": {
        "summary": "Clear application queue",
        "description": "Resets the request queue for the application by failing all active requests. This is typically used after a problem with application servers delivering abnormally slow responses has been corrected, to clear hanging requests from the queue. NOTE: This is currently not implemented to reject the requests, but instead to stop counting them as active requests, so it should be used with care.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/octet-stream"
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful."
          }
        }
      }
    },
    "/applications/{id}/maintenance-microsite": {
      "get": {
        "summary": "Get the maintenance microsite for an application.",
        "description": "Will return the maintenance microsite file for an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json",
          "application/x-tar",
          "application/zip"
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/MicrositeFile"
            }
          }
        }
      },
      "put": {
        "summary": "Creates the maintenance microsite for an application.",
        "description": "Will create the maintenance microsite for an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "file",
            "in": "formData",
            "description": "Maintenance microsite file",
            "required": true,
            "type": "file"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Success"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete the maintenance microsite for an application.",
        "description": "Will delete the maintenance microsite for an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Success"
            }
          }
        }
      }
    },
    "/applications/{id}/maintenance-microsite_preview": {
      "put": {
        "summary": "Creates the maintenance microsite preview for an application.",
        "description": "Will create the maintenance microsite preview for an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "file",
            "in": "formData",
            "description": "Maintenance microsite file",
            "required": true,
            "type": "file"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Success"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete the maintenance microsite preview for an application.",
        "description": "Will delete the maintenance microsite preview for an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Success"
            }
          }
        }
      }
    },
    "/applications/{id}/waf-rules": {
      "get": {
        "summary": "Get the WAF rules for an application.",
        "description": "Returns the Web Application Firewall (WAF) rules for an application. If the Accept header is application/json, then the json will be returned. Any other Accept value will return the archived file in application/x-tar format.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json",
          "application/x-tar"
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/WafRules"
            }
          }
        }
      },
      "patch": {
        "summary": "Update the WAF rules for an application.",
        "description": "Supports updates to the WAF rules specified as per the RFC 6902 format.",
        "consumes": [
          "application/json-patch+json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "WAF rule properties requested to be updated.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/WafRulesPatch"
            }
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "The application waf rules were successfully updated.",
            "schema": {
              "$ref": "#/definitions/WafRules"
            }
          }
        }
      }
    },
    "/applications/{id}/status": {
      "get": {
        "summary": "Get the current status of all components related to an application.",
        "description": "Returns the current status of all components related to an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "applications"
        ],
        "responses": {
          "200": {
            "description": "A successful response containing the current status of the application.",
            "schema": {
              "$ref": "#/definitions/ApplicationStatus"
            }
          }
        }
      }
    },
    "/archived-logs": {
      "get": {
        "summary": "Get archived logs",
        "description": "Returns a list of archived logs for the account and applications in ascending order.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "archived-logs"
        ],
        "responses": {
          "200": {
            "description": "A successful response containing the available archived logs.",
            "schema": {
              "$ref": "#/definitions/ArchivedLogs"
            }
          }
        }
      }
    },
    "/archived-logs/events": {
      "get": {
        "summary": "Gets archived event logs",
        "description": "Gets archived event logs for the specified time period.\n",
        "produces": [
          "application/gzip"
        ],
        "tags": [
          "archived-logs"
        ],
        "responses": {
          "200": {
            "description": "A successful response."
          }
        }
      },
      "delete": {
        "summary": "Delete archived event logs",
        "description": "Deletes archived event logs for the specified time period.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "archived-logs"
        ],
        "responses": {
          "200": {
            "description": "A successful response containing the deleted archived logs.",
            "schema": {
              "$ref": "#/definitions/ArchivedLogs"
            }
          }
        }
      }
    },
    "/archived-logs/applications/{id}/{log-type}": {
      "get": {
        "summary": "Gets archived application logs",
        "description": "Gets archived application logs for the specified time period.\n",
        "produces": [
          "application/gzip"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "log-type",
            "in": "path",
            "description": "Log type.",
            "required": true,
            "type": "string",
            "enum": [
              "custom",
              "cdn",
              "csp-reports",
              "pageviews",
              "proxy-logs"
            ]
          }
        ],
        "tags": [
          "archived-logs"
        ],
        "responses": {
          "200": {
            "description": "A successful response."
          }
        }
      },
      "delete": {
        "summary": "Delete archived application logs",
        "description": "Deletes archived application logs for the specified time period.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "archived-logs"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "log-type",
            "in": "path",
            "description": "Log type.",
            "required": true,
            "type": "string",
            "enum": [
              "custom",
              "cdn",
              "csp-reports",
              "pageviews",
              "proxy-logs"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response containing the deleted archived logs.",
            "schema": {
              "$ref": "#/definitions/ArchivedLogs"
            }
          }
        }
      }
    },
    "/clusters": {
      "get": {
        "summary": "Get clusters",
        "description": "Will return all the cluster resources that the caller is authorized to view.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "clusters"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Cluster"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a cluster",
        "description": "Creates a cluster. Servers for that cluster will be created to meet the minimum_size and manual_size settings.\n",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The cluster definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ClusterPost"
            }
          }
        ],
        "tags": [
          "clusters"
        ],
        "responses": {
          "201": {
            "description": "The cluster was successfully created.",
            "schema": {
              "$ref": "#/definitions/Cluster"
            }
          }
        }
      }
    },
    "/clusters/{id}": {
      "get": {
        "summary": "Get the identified cluster resource",
        "description": "Will return the cluster resource if the caller's account is authorized to view.\n",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Cluster id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "clusters"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Cluster"
            }
          }
        }
      },
      "patch": {
        "summary": "Modify a cluster resource",
        "description": "Select properties of a cluster resource can be modified using this call.\n",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Cluster id.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The properties of the cluster resource to be patched.<br><br>Patchable properties are limited to those described in the ClusterPatch model.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ClusterPatch"
            }
          }
        ],
        "tags": [
          "clusters"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Cluster"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a cluster resource",
        "description": "The cluster will be immediately deleted if it is not in use and has no active servers associated with it. If the cluster has any active servers associated with it, a task will be created to destroy all the active servers first after which the cluster will be deleted.\n",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Cluster id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "clusters"
        ],
        "responses": {
          "200": {
            "description": "The cluster was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/Cluster"
            }
          },
          "202": {
            "description": "A task was created to delete the cluster.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          }
        }
      }
    },
    "/data-planes": {
      "get": {
        "summary": "Get authorized data planes",
        "description": "An account user or administrator is authorized to all data planes in use by applications defined in their account.",
        "tags": [
          "data-planes"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DataPlane"
              }
            }
          }
        }
      }
    },
    "/data-planes/{id}": {
      "get": {
        "summary": "Get a specified data plane",
        "description": "An account user or administrator is authorized to all data planes in use by applications defined in their account. Attempts to access other data planes will result in 404 NOT FOUND.",
        "tags": [
          "data-planes"
        ],
        "parameters": [
          {
            "$ref": "#/parameters/id"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/DataPlane"
            }
          }
        }
      }
    },
    "/events": {
      "get": {
        "summary": "Get events",
        "description": "Retrieve a list of events in descending order by created time.",
        "parameters": [
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/start"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "The maximum number of events returned. If limit is not provided, the implicit limit is 100",
            "required": false,
            "type": "integer",
            "minimum": 1
          }
        ],
        "tags": [
          "events"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Events"
            }
          }
        }
      },
      "post": {
        "summary": "Submit an external event",
        "description": "Submit an external event to add to the event log.",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the new event.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/EventPost"
            }
          }
        ],
        "tags": [
          "events"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Event"
            }
          }
        }
      }
    },
    "/files": {
      "get": {
        "summary": "Get all files",
        "description": "Returns all files for the current account.\n",
        "tags": [
          "files"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/File"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a file.",
        "description": "Upload a file.",
        "consumes": [
          "application/json",
          "multipart/form-data"
        ],
        "parameters": [
          {
            "name": "content",
            "in": "formData",
            "description": "File content.",
            "type": "file"
          },
          {
            "name": "type",
            "in": "formData",
            "description": "The type of file being uploaded.",
            "type": "string",
            "enum": [
              "bootstrap",
              "geo-db",
              "handler",
              "microsite",
              "waf-rules"
            ]
          },
          {
            "name": "name",
            "in": "formData",
            "description": "The name of the file.",
            "type": "string",
            "maxLength": 250
          },
          {
            "name": "description",
            "in": "formData",
            "description": "A description of the file.",
            "type": "string",
            "maxLength": 250
          },
          {
            "name": "label",
            "in": "formData",
            "description": "A version label.",
            "type": "string",
            "maxLength": 50
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the new file.",
            "schema": {
              "$ref": "#/definitions/FilePost"
            }
          }
        ],
        "tags": [
          "files"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/File"
            }
          }
        }
      }
    },
    "/files/{id}": {
      "get": {
        "summary": "Get a file",
        "description": "Will return the file resource requested.\n",
        "tags": [
          "files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/File"
            }
          }
        }
      },
      "patch": {
        "summary": "Update a file",
        "description": "Edits properties and/or contents of a file.",
        "consumes": [
          "application/json",
          "multipart/form-data"
        ],
        "parameters": [
          {
            "name": "content",
            "in": "formData",
            "description": "File content.",
            "type": "file"
          },
          {
            "name": "name",
            "in": "formData",
            "description": "The name of the file.",
            "type": "string",
            "maxLength": 250
          },
          {
            "name": "description",
            "in": "formData",
            "description": "A description of the file.",
            "type": "string",
            "maxLength": 250
          },
          {
            "name": "label",
            "in": "formData",
            "description": "A version label.",
            "type": "string",
            "maxLength": 50
          },
          {
            "in": "body",
            "name": "body",
            "description": "The definition of the new file.",
            "schema": {
              "$ref": "#/definitions/FilePatch"
            }
          },
          {
            "name": "current_version",
            "in": "formData",
            "description": "Set to the version number that will be used or 'latest' to use the most recent version.",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "files"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/File"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a file",
        "description": "The file must belong to the current account.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "File id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "files"
        ],
        "responses": {
          "200": {
            "description": "The file was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/File"
            }
          }
        }
      }
    },
    "/files/{id}/contents": {
      "get": {
        "summary": "Get a file contents",
        "description": "Will return the contents of the requested file.\n",
        "tags": [
          "files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "version",
            "in": "query",
            "description": "Version number of the file.",
            "required": false,
            "type": "string"
          }
        ],
        "produces": [
          "application/octet-stream"
        ],
        "responses": {
          "200": {
            "description": "The call was successful."
          }
        }
      }
    },
    "/files/{id}/contents/{path}": {
      "get": {
        "summary": "Get contents of a file within a package",
        "description": "Will return the contents of a file with path within a package.\n",
        "tags": [
          "files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "path",
            "in": "path",
            "description": "Relative path of a file within a package.",
            "required": true,
            "type": "string"
          },
          {
            "name": "version",
            "in": "query",
            "description": "Version number of the file.",
            "required": false,
            "type": "string"
          }
        ],
        "produces": [
          "application/octet-stream"
        ],
        "responses": {
          "200": {
            "description": "The call was successful."
          }
        }
      }
    },
    "/files/{id}/details": {
      "get": {
        "summary": "Gets all details.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "files"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/files/{id}/versions/{version_id}": {
      "get": {
        "summary": "Gets properties of a particular version of a file.",
        "description": "Will return the properties of a particular version of a file.\n",
        "tags": [
          "files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "version_id",
            "in": "path",
            "description": "Version number of the file.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/FileVersion"
            }
          }
        }
      }
    },
    "/files/{id}/versions/{version_id}/contents/{path}": {
      "get": {
        "summary": "Get contents of a file version within a package.",
        "description": "Will return the contents of a particular version of file with path within a package.\n",
        "tags": [
          "files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A file id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "version_id",
            "in": "path",
            "description": "Version number of the file.",
            "required": true,
            "type": "string"
          },
          {
            "name": "path",
            "in": "path",
            "description": "Relative path of a file within a package.",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/octet-stream"
        ],
        "responses": {
          "200": {
            "description": "The call was successful."
          }
        }
      }
    },
    "/handlers": {
      "get": {
        "summary": "Retrieve all handlers scoped to the account.",
        "description": "Returns all handlers scoped to the account.",
        "tags": [
          "handlers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "description": "An array of handlers.",
              "type": "array",
              "items": {
                "$ref": "#/definitions/Handler"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Creates a handler.",
        "description": "Creates a handler from the request body.",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "tags": [
          "handlers"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The desired configuration of the created handler.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/HandlerPost"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The handler was successfully created.",
            "schema": {
              "$ref": "#/definitions/Handler"
            }
          }
        }
      }
    },
    "/handlers/{id}": {
      "patch": {
        "summary": "Updates a handler.",
        "description": "Updates an existing handler.",
        "tags": [
          "handlers"
        ],
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of an existing handler.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The updated handler definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/HandlerConfiguration"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The handler was successfully updated.",
            "schema": {
              "$ref": "#/definitions/Handler"
            }
          }
        }
      },
      "delete": {
        "summary": "Deletes a handler.",
        "description": "Deletes an existing handler.",
        "tags": [
          "handlers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of an existing handler.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The handler was successfully deleted.",
            "schema": {
              "$ref": "#/definitions/Handler"
            }
          }
        }
      }
    },
    "/log-schemas": {
      "get": {
        "summary": "Get log schemas",
        "description": "Returns all log schemas usable by an account.",
        "tags": [
          "log-schemas"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "description": "An array of log schemas.",
              "type": "array",
              "items": {
                "$ref": "#/definitions/LogSchema"
              }
            }
          }
        }
      }
    },
    "/metric-prototypes": {
      "get": {
        "summary": "Get metric prototypes",
        "description": "Returns all the metric prototypes for the request account",
        "tags": [
          "metric-prototypes"
        ],
        "responses": {
          "200": {
            "description": "The metric prototypes were successfully retrieved",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetricPrototype"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new metric prototype for the request account",
        "description": "Creates a new metric prototype and returns the definition",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The metric prototype definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MetricPrototypePost"
            }
          }
        ],
        "tags": [
          "metric-prototypes"
        ],
        "responses": {
          "200": {
            "description": "The metric prototype was successfully created",
            "schema": {
              "$ref": "#/definitions/MetricPrototype"
            }
          }
        }
      }
    },
    "/metric-prototypes/{id}": {
      "get": {
        "summary": "Gets the specified metric prototype",
        "description": "Retrieves a metric prototype definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Metric prototype id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "metric-prototypes"
        ],
        "responses": {
          "200": {
            "description": "The metric prototype was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/MetricPrototype"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a metric prototype",
        "description": "The metric prototype must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Metric prototype id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "metric-prototypes"
        ],
        "responses": {
          "200": {
            "description": "The metric prototype was successfully deleted",
            "schema": {
              "$ref": "#/definitions/MetricPrototype"
            }
          }
        }
      }
    },
    "/monitors": {
      "get": {
        "summary": "Get monitors",
        "description": "Returns all the monitors for the request account",
        "tags": [
          "monitors"
        ],
        "responses": {
          "200": {
            "description": "The monitors were successfully retrieved",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Monitor"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new monitor for the request account",
        "description": "Creates a new monitor and returns the definition",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The monitor definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitorPost"
            }
          }
        ],
        "tags": [
          "monitors"
        ],
        "responses": {
          "200": {
            "description": "The monitor was successfully created",
            "schema": {
              "$ref": "#/definitions/Monitor"
            }
          }
        }
      }
    },
    "/monitors/{id}": {
      "get": {
        "summary": "Gets the specified monitor",
        "description": "Retrieves a monitor definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Monitor id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "monitors"
        ],
        "responses": {
          "200": {
            "description": "The monitor was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/Monitor"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches the specified monitor",
        "description": "Updates the monitor and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Monitor id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The monitor definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitorConfiguration"
            }
          }
        ],
        "tags": [
          "monitors"
        ],
        "responses": {
          "200": {
            "description": "The monitor was successfully updated",
            "schema": {
              "$ref": "#/definitions/Monitor"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a monitor",
        "description": "The monitor must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Monitor id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "monitors"
        ],
        "responses": {
          "200": {
            "description": "The monitor was successfully deleted",
            "schema": {
              "$ref": "#/definitions/Monitor"
            }
          }
        }
      }
    },
    "/plans": {
      "get": {
        "summary": "Get authorized plans",
        "description": "A user having entitlement-admin role is authorized to access all the plans. Attempts to access plans by a non entitlement-admin user will result in 403 Forbidden.",
        "tags": [
          "plans"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Plan"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Creates a plan",
        "description": "Creates a plan and returns the definition",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The plan definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PlanPost"
            }
          }
        ],
        "tags": [
          "plans"
        ],
        "responses": {
          "200": {
            "description": "The plan was successfully created.",
            "schema": {
              "$ref": "#/definitions/Plan"
            }
          }
        }
      }
    },
    "/plans/{id}": {
      "get": {
        "summary": "Get the identified authorized plan",
        "description": "Will return plan if the user is authorized to access all the plan.",
        "tags": [
          "plans"
        ],
        "responses": {
          "200": {
            "description": "The plan was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/Plan"
            }
          }
        }
      },
      "patch": {
        "summary": "Update a plan",
        "description": "Update one or more attributes of a plan",
        "consumes": [
          "application/json"
        ],
        "tags": [
          "plans"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of an existing plan.",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The updated plan definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PlanConfiguration"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The plan was successfully updated",
            "schema": {
              "$ref": "#/definitions/Plan"
            }
          }
        }
      }
    },
    "/providers": {
      "get": {
        "summary": "Get providers",
        "description": "Returns all the provider resources that the caller is authorized to view.",
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "An array of providers.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Provider"
              }
            }
          }
        }
      }
    },
    "/providers/{id}": {
      "get": {
        "summary": "Get the identified provider resource",
        "description": "Will return the provider resource if the caller's account is authorized to view.",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Provider"
            }
          }
        }
      }
    },
    "/providers/{id}/datacenters": {
      "get": {
        "summary": "Gets all data centers for a CenturyLink provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/datacenters/{datacenter_id}/images": {
      "get": {
        "summary": "Gets all images in a data center  for a CenturyLink provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "datacenter_id",
            "in": "path",
            "description": "A datacenter id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/datacenters/{datacenter_id}/images/{image_id}": {
      "get": {
        "summary": "Gets an image in a data center for a CenturyLink provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "datacenter_id",
            "in": "path",
            "description": "A datacenter id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "image_id",
            "in": "path",
            "description": "An image id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/datacenters/{datacenter_id}/server-groups": {
      "get": {
        "summary": "Gets all server groups in a data center for a CenturyLink provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "datacenter_id",
            "in": "path",
            "description": "A datacenter id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/firewalls": {
      "get": {
        "summary": "Gets all firewalls for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/firewalls/{firewall_id}": {
      "get": {
        "summary": "Gets a firewall for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "firewall_id",
            "in": "path",
            "description": "A firewall id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/images": {
      "get": {
        "summary": "Gets all images for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/images/{image_id}": {
      "get": {
        "summary": "Gets a specified image for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "image_id",
            "in": "path",
            "description": "An image id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/instance-types": {
      "get": {
        "summary": "Gets all instance types for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/networks": {
      "get": {
        "summary": "Gets all networks for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/networks/{network_id}": {
      "get": {
        "summary": "Gets a specified network for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "network_id",
            "in": "path",
            "description": "A network id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/regions": {
      "get": {
        "summary": "Gets all regions for a provider.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/images": {
      "get": {
        "summary": "Gets all images for a specified region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/images/{image_id}": {
      "get": {
        "summary": "Gets a specified image.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "image_id",
            "in": "path",
            "description": "An image id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/images": {
      "get": {
        "summary": "Gets all images for a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/images": {
      "get": {
        "summary": "Gets all images for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/instance-templates": {
      "get": {
        "summary": "Gets all instance templates for a specified region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/network-acls": {
      "get": {
        "summary": "Gets all network acls for a region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/network-acls/{network_acl_id}": {
      "get": {
        "summary": "Gets a specified network acl.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "network_acl_id",
            "in": "path",
            "description": "A network acl id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/networks": {
      "get": {
        "summary": "Gets all networks for a region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/networks/{network_id}": {
      "get": {
        "summary": "Gets a specified network.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "network_id",
            "in": "path",
            "description": "A network id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/security-groups": {
      "get": {
        "summary": "Gets all security groups for a region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/security-groups/{security_group_id}": {
      "get": {
        "summary": "Gets a specified security group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "security_group_id",
            "in": "path",
            "description": "A security group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/subnets": {
      "get": {
        "summary": "Gets all subnets for a region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/subnets/{subnet_id}": {
      "get": {
        "summary": "Gets a specified subnet.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "subnet_id",
            "in": "path",
            "description": "A subnet id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/subnets": {
      "get": {
        "summary": "Gets all subnets for a resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/subnets": {
      "get": {
        "summary": "Gets all subnets for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/zones": {
      "get": {
        "summary": "Gets all zones for a region.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/identities": {
      "get": {
        "summary": "Gets all managed identities for a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/identities": {
      "get": {
        "summary": "Gets all managed identities for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/instance-types": {
      "get": {
        "summary": "Gets all instance types for a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/instance-types": {
      "get": {
        "summary": "Gets all instance types for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/zones/{zone_id}/instance-types": {
      "get": {
        "summary": "Gets all instance types for a specified zone.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "zone_id",
            "in": "path",
            "description": "A zone id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/regions/{region_id}/zones/{zone_id}/instance-types/{instance_type_id}": {
      "get": {
        "summary": "Gets a specified instance type.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "zone_id",
            "in": "path",
            "description": "A zone id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "instance_type_id",
            "in": "path",
            "description": "An instance type id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{id}/{resource-collection}": {
      "get": {
        "summary": "Get the identified provider resource collection",
        "description": "DO NOT USE THIS TO ACTUALLY MAKE AN API CALL. The 'Try it out!' button will generate a '405 Method Not Allowed' error. This is to document the response received when a request to fetch a provider resource collection is made. Additionally, the '{resource-collection}' may or may not be a hierarchical specification of nested resources. Some examples are: 'firewalls', 'regions/{id}/security-groups' etc.. The list of supported resources and their hierarchy varies from one provider to another. These resource collections are returned in the 'links' attribute for providers and can be seen by fetching a provider. These resources generally refer to a cloud provider resource and can be viewed in the cloud provider account directly.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/ProviderResourceCollection"
            }
          }
        }
      }
    },
    "/providers/{id}/{resource}/{id}": {
      "get": {
        "summary": "Get the identified provider resource collection",
        "description": "DO NOT USE THIS TO ACTUALLY MAKE AN API CALL. The 'Try it out!' button will generate a '405 Method Not Allowed' error. This is to document the response received when a request to fetch a provider resource is made. Additionally, the '{resource}' is a hierarchical specification of nested resources and resource IDs. Some examples are: 'firewalls/{id}', 'regions/{id}/security-groups/{id}' etc. The list of supported resources and their hierarchy varies from one provider to another. These resources are returned in the 'links' attribute for providers and can be seen by fetching a provider. These resources generally refer to a cloud provider resource and can be viewed in the cloud provider account directly.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/ProviderResource"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/security-groups": {
      "get": {
        "summary": "Gets all security groups for a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/security-groups": {
      "get": {
        "summary": "Gets all security groups for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/storage-accounts": {
      "get": {
        "summary": "Gets all storage accounts for a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/providers/{provider_id}/resource-groups/{group_id}/regions/{region_id}/storage-accounts": {
      "get": {
        "summary": "Gets all storage accounts for a region of a specified resource group.",
        "description": "",
        "parameters": [
          {
            "name": "provider_id",
            "in": "path",
            "description": "A provider id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "A group id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "region_id",
            "in": "path",
            "description": "A region id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "providers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/reports": {
      "get": {
        "summary": "Get authorized reports",
        "description": "A super user is authorized to access all the reports. Attempts to access reports by a non super user will result in 403 Forbidden.",
        "tags": [
          "reports"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ReportIdentity"
              }
            }
          }
        }
      }
    },
    "/reports/{id}": {
      "get": {
        "summary": "Get a specified report or array of sectioned report HREFs",
        "description": "Entitlement administrators and super users are authorized access to all system-level reports. Otherwise, users can only access the reports in their account. Attempts to access report by a non super user will result in 403 Forbidden.",
        "tags": [
          "reports"
        ],
        "parameters": [
          {
            "$ref": "#/parameters/id"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/definitions/Report"
                },
                {
                  "type": "object",
                  "properties": {
                    "schema": {
                      "type": "string",
                      "pattern": "sectioned-report"
                    },
                    "sections": {
                      "type": "array",
                      "description": "Available sections of the given report",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "href": {
                            "$ref": "#/definitions/SectionedReportHref"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "/reports/test-result": {
      "get": {
        "summary": "Retrieves application test reports",
        "description": "Retrieves the application test results as sectioned reports.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "reports"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/SectionedReport"
            }
          }
        }
      }
    },
    "/reports/test-result/sections/{id}": {
      "get": {
        "summary": "Retrieve an application test report by section.",
        "description": "Will return an application test by its id.\n",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Application test report section ID.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "reports"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/ApplicationTestReport"
            }
          }
        }
      }
    },
    "/secrets": {
      "get": {
        "summary": "Get secrets",
        "description": "Will return all the secret resources that the caller is authorized to view.\n",
        "produces": [
          "application/json"
        ],
        "tags": [
          "secrets"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/SecretArray"
            }
          }
        }
      },
      "post": {
        "summary": "Create a secret",
        "description": "",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The secret definition.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SecretPost"
            }
          }
        ],
        "tags": [
          "secrets"
        ],
        "responses": {
          "200": {
            "description": "The secret was successfully created.",
            "schema": {
              "$ref": "#/definitions/Secret"
            }
          }
        }
      }
    },
    "/secrets/{id}": {
      "get": {
        "summary": "Describe a secret resource.",
        "description": "Retrieve a secret resource.\n",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Secret id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "secrets"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Secret"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a secret resource.",
        "description": "Secrets referenced by resources cannot be deleted.\n",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Secret id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "secrets"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Secret"
            }
          }
        }
      }
    },
    "/servers": {
      "get": {
        "summary": "Get servers",
        "description": "An array of servers. Servers represent an existing or potential web service at a known address.",
        "produces": [
          "application/json"
        ],
        "tags": [
          "servers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ClusterServer"
              }
            }
          }
        }
      }
    },
    "/servers/{id}": {
      "get": {
        "summary": "Get the identified server resource",
        "description": "The requested server. Server represent an existing or potential web service at a known address.",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Server id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "servers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/ClusterServer"
            }
          }
        }
      },
      "patch": {
        "summary": "Update a server",
        "description": "Update one or more attributes of a server object",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Server id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "description": "Server attributes to update",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ServerPatch"
            }
          }
        ],
        "tags": [
          "servers"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/ClusterServer"
            }
          }
        }
      }
    },
    "/servers/self": {
      "delete": {
        "x-roles": [
          "anonymous"
        ],
        "summary": "Deletes a server.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A server id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "servers"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/servers/{id}/metrics": {
      "get": {
        "summary": "Get metrics for a server",
        "description": "Returns specified metrics for a server. In the absence of from and to parameters, metrics for the last 5 minutes are returned.",
        "tags": [
          "servers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Server id.",
            "required": true,
            "type": "string"
          },
          {
            "name": "names",
            "in": "query",
            "description": "A comma separated list of metrics names. Possible series names associated with a server are: loadavg_norm, cpu_percent, iowait_percent, memory_used_percent, requests_per_second, kilobytes_per_second, avg_processor_queue_length, avg_disk_queue_length",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/resolution"
          },
          {
            "$ref": "#/parameters/summarize"
          }
        ],
        "responses": {
          "200": {
            "description": "Metrics for the server have been returned successfully.",
            "schema": {
              "$ref": "#/definitions/Metrics"
            }
          }
        }
      }
    },
    "/servers/self/metrics": {
      "post": {
        "x-roles": [
          "anonymous"
        ],
        "summary": "Post server metrics to analyze scaling conditions",
        "description": "Server periodically posts metrics that helps in making a scaling decision",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "Metrics to post",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ServerMeasurements"
            }
          }
        ],
        "tags": [
          "servers"
        ],
        "responses": {
          "200": {
            "description": "Metrics were posted",
            "schema": {
              "$ref": "#/definitions/ServerMeasurements"
            }
          }
        }
      }
    },
    "/services": {
      "get": {
        "summary": "Gets all services.",
        "description": "",
        "parameters": [

        ],
        "tags": [
          "services"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/services/{id}": {
      "get": {
        "summary": "Gets a service.",
        "description": "",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "A service id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "services"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/status": {
      "get": {
        "summary": "Status of the system",
        "description": "Returns an array of status elements representing current system state",
        "tags": [
          "status"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/StatusElement"
              }
            }
          }
        }
      }
    },
    "/tasks": {
      "get": {
        "summary": "Get all task resources.",
        "description": "Returns all tasks that the call is authorized to view.",
        "tags": [
          "tasks"
        ],
        "parameters": [
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/start"
          },
          {
            "$ref": "#/parameters/limit"
          },
          {
            "$ref": "#/parameters/order"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Task"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Execute a task against a resource",
        "description": "This API will create a task that may be long running and may execute against a resource.  If the task is long running a 200 code is returned otherwise a 201 code with be returned. The task can be fetched throughout its lifecycle and used to track the progress and completion of the task.<br><br>The following tasks can be executed against an application resource and do not return a result:<br><ul><li>Initiate validation for an application.  The validate task will verify each of the application's unverified challenges.</li><li>Start a stopped application.</li><li>Stop a running application.</li><li>Enter an application into maintenance mode.<br><b>parameters</b>:<pre>{\"maximum_duration\": integer}</pre></li><li>Exit an application from maintenance mode.</li><li>Check a hostname for availability.<br><b>parameters</b>:<pre>{\"hostname\": string}</pre><b>result</b>:<pre>{\"available\": boolean}</pre></li></ul>",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The task definition.  The target must be an href for the resource that the task is to be performed on.  For example:  Starting an application.  type is 'start' and endpoint is something like '/v2/applications/abcxyz'.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TaskPost"
            }
          }
        ],
        "tags": [
          "tasks"
        ],
        "responses": {
          "200": {
            "description": "The task has been created and is complete.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          },
          "201": {
            "description": "The task has been created and has not yet completed.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          }
        }
      }
    },
    "/tasks/{id}": {
      "get": {
        "summary": "Describe a task",
        "description": "Retrieve a task resource.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "task id.",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "tasks"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/Task"
            }
          }
        }
      }
    },
    "/tasks/{id}/logs": {
      "get": {
        "summary": "Get logs for a task",
        "description": "Retrieve the logs recorded for a task",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "task id.",
            "required": true,
            "type": "string"
          },
          {
            "$ref": "#/parameters/from"
          },
          {
            "$ref": "#/parameters/to"
          },
          {
            "$ref": "#/parameters/limit"
          }
        ],
        "tags": [
          "tasks",
          "logs"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ProcessLog"
              }
            }
          }
        }
      }
    },
    "/templates": {
      "get": {
        "summary": "Gets all templates for the request account",
        "description": "Gets all templates",
        "tags": [
          "templates"
        ],
        "responses": {
          "200": {
            "description": "The templates were successfully retrieved.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Template"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new template for the request account",
        "description": "Creates a new template and returns the definition",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The template definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TemplateConfiguration"
            }
          }
        ],
        "tags": [
          "templates"
        ],
        "responses": {
          "200": {
            "description": "The template was successfully created",
            "schema": {
              "$ref": "#/definitions/Template"
            }
          }
        }
      }
    },
    "/templates/{id}": {
      "get": {
        "summary": "Gets the specified template",
        "description": "Retrieves a template definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Template id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "templates"
        ],
        "responses": {
          "200": {
            "description": "The template was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/Template"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches the specified template",
        "description": "Updates the template and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Template id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The Template definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TemplateConfiguration"
            }
          }
        ],
        "tags": [
          "templates"
        ],
        "responses": {
          "200": {
            "description": "The template was successfully updated",
            "schema": {
              "$ref": "#/definitions/Template"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a template",
        "description": "The template must belong to the current account or system account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Template id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "templates"
        ],
        "responses": {
          "200": {
            "description": "The template was successfully deleted",
            "schema": {
              "$ref": "#/definitions/Template"
            }
          }
        }
      }
    },
    "/url-maps": {
      "get": {
        "summary": "Gets all URL maps for the request account",
        "description": "Gets all URL maps",
        "tags": [
          "url-maps"
        ],
        "responses": {
          "200": {
            "description": "The URL maps were successfully retrieved.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/UrlMap"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a new URL map for the request account",
        "description": "Creates a new URL map and returns the definition",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "The URL map definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UrlMapConfiguration"
            }
          }
        ],
        "tags": [
          "url-maps"
        ],
        "responses": {
          "200": {
            "description": "The URL map was successfully created",
            "schema": {
              "$ref": "#/definitions/UrlMap"
            }
          }
        }
      }
    },
    "/url-maps/{id}": {
      "get": {
        "summary": "Gets the specified URL map",
        "description": "Retrieves an URL map definition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "URL map id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "url-maps"
        ],
        "responses": {
          "200": {
            "description": "The URL map was successfully retrieved",
            "schema": {
              "$ref": "#/definitions/UrlMap"
            }
          }
        }
      },
      "patch": {
        "summary": "Patches the specified URL map",
        "description": "Updates the URL map and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "URL map id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The URL map definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UrlMapConfiguration"
            }
          }
        ],
        "tags": [
          "url-maps"
        ],
        "responses": {
          "200": {
            "description": "The URL map was successfully updated",
            "schema": {
              "$ref": "#/definitions/UrlMap"
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an URL map",
        "description": "The URL map must belong to the current account",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "URL map id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "url-maps"
        ],
        "responses": {
          "200": {
            "description": "The URL map was successfully deleted",
            "schema": {
              "$ref": "#/definitions/UrlMap"
            }
          }
        }
      }
    },
    "/users": {
      "get": {
        "summary": "Get all users",
        "description": "Returns all users for the current account.",
        "tags": [
          "users"
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/User"
            }
          }
        }
      }
    },
    "/users/{id}": {
      "get": {
        "summary": "Get a specified user",
        "description": "Will return the current user. If the id is 'self' then get the current user",
        "tags": [
          "users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id or 'self'",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The call was successful.",
            "schema": {
              "$ref": "#/definitions/User"
            }
          }
        }
      },
      "patch": {
        "summary": "Update the current user",
        "description": "Properties of the specified user can be updated. Users can only update their own self, and can pass 'self' for the id",
        "consumes": [
          "application/json",
          "application/json-patch+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id or 'self'",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The user parameters to update.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UserPatch"
            }
          }
        ],
        "tags": [
          "users"
        ],
        "responses": {
          "200": {
            "description": "The user was successfully updated.",
            "schema": {
              "$ref": "#/definitions/User"
            }
          }
        }
      }
    },
    "/users/{id}/access-keys": {
      "get": {
        "summary": "Access keys for current user",
        "description": "Return all access keys for the current user",
        "tags": [
          "users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "An array of access keys",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AccessKey"
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a persistent access key for the current user",
        "description": "For users authorized to multiple accounts an authorization to a different account is created with this call",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "Configuration for the access key to be created",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AccessKeyConfiguration"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "users"
        ],
        "responses": {
          "200": {
            "description": "The access key that was created. The secret for the access key is available only as a result of creating it and cannot be obtained afterward.",
            "schema": {
              "$ref": "#/definitions/AccessKeySecret"
            }
          }
        }
      }
    },
    "/users/{user_id}/access-keys/{id}": {
      "delete": {
        "summary": "Delete an access key",
        "description": "Delete an access key for the current user",
        "parameters": [
          {
            "name": "user_id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Access key id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "users"
        ],
        "responses": {
          "200": {
            "description": "The access key was deleted",
            "schema": {
              "$ref": "#/definitions/AccessKey"
            }
          }
        }
      }
    },
    "/users/{id}/authorization": {
      "get": {
        "summary": "Current authorization state",
        "description": "Return properties describing the current authorization",
        "tags": [
          "users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "The current authorization.",
            "schema": {
              "$ref": "#/definitions/AccessKey"
            }
          }
        }
      },
      "post": {
        "summary": "Create additional authorizations for the current user",
        "description": "For users authorized to multiple accounts an authorization to a different account is created with this call",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The authorization to create",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AuthorizationAccount"
            }
          }
        ],
        "tags": [
          "users"
        ],
        "responses": {
          "200": {
            "description": "The authorization was created",
            "schema": {
              "$ref": "#/definitions/AccessKeySecret"
            }
          }
        }
      }
    },
    "/users/{id}/group-invitations": {
      "get": {
        "summary": "Retrieves the group invitations sent to this user",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/GroupInvitation"
              }
            }
          }
        }
      }
    },
    "/users/{id}/group-invitations/{group-invitation-id}": {
      "get": {
        "summary": "Get the specific group invitation sent to this user",
        "description": "Group invitations are used to invite a user to multiple roles at once",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group-invitation-id",
            "in": "path",
            "description": "The group invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/GroupInvitation"
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Accept or decline a specific group invitation",
        "description": "Updates the group invitation and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group-invitation-id",
            "in": "path",
            "description": "The group invitation id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The group invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/GroupInvitationConfiguration"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The group invitation was successfully accepted or declined",
            "schema": {
              "$ref": "#/definitions/GroupInvitation"
            }
          }
        }
      }
    },
    "/users/{id}/groups": {
      "get": {
        "summary": "Retrieves the groups to which a user has accepted an invitation",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Group"
              }
            }
          }
        }
      }
    },
    "/users/{id}/groups/{group_id}": {
      "get": {
        "summary": "Retrieves a specific group to which a user has accepted an invitation",
        "description": "Groups can be used to grant users many roles at once",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "object",
              "items": {
                "$ref": "#/definitions/Group"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Removes a user from a group to which they have accepted an invitation",
        "description": "After vacating a group, the user will lose access to the associated roles",
        "tags": [
          "groups"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "group_id",
            "in": "path",
            "description": "Group id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "object",
              "$ref": "#/definitions/Group"
            }
          }
        }
      }
    },
    "/users/{id}/invitations": {
      "get": {
        "summary": "Retrieves the invitations sent to this user",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/RoleInvitation"
              }
            }
          }
        }
      }
    },
    "/users/{id}/invitations/{invitation_id}": {
      "get": {
        "summary": "Retrieves the specific invitation sent to this user",
        "description": "Invitations are used to grant roles to users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/RoleInvitation"
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Accept or decline a specific invitation",
        "description": "Updates the invitation and returns the updated definition",
        "consumes": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitation_id",
            "in": "path",
            "description": "Invitation id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "description": "The invitation definition",
            "required": true,
            "schema": {
              "$ref": "#/definitions/RoleInvitationConfiguration"
            }
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The invitation was successfully accepted or declined",
            "schema": {
              "$ref": "#/definitions/RoleInvitation"
            }
          }
        }
      }
    },
    "/users/{id}/roles": {
      "get": {
        "summary": "Get the roles accepted by this user",
        "description": "Roles can be accepted by users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Role"
              }
            }
          }
        }
      }
    },
    "/users/{id}/roles/{role_id}": {
      "get": {
        "summary": "Get a specific accepted role",
        "description": "Roles can be accepted by users",
        "tags": [
          "roles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "role_id",
            "in": "path",
            "description": "Role id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The call was successful",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      },
      "delete": {
        "summary": "Leave an accepted role",
        "description": "The role must have been accepted by this user",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          },
          {
            "name": "role_id",
            "in": "path",
            "description": "Role id",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "roles"
        ],
        "responses": {
          "200": {
            "description": "The user successfully left the role",
            "schema": {
              "$ref": "#/definitions/Role"
            }
          }
        }
      }
    },
    "/users/{id}/mfa-secret": {
      "delete": {
        "summary": "Delete a users MFA secret",
        "description": "The user will no longer have MFA enabled",
        "tags": [
          "users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "The users MFA secret was deleted",
            "schema": {
              "$ref": "#/definitions/User"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "AccessKey": {
      "description": "A key that is used to authorize access to the Webscale API",
      "allOf": [
        {
          "$ref": "#/definitions/AccessKeyState"
        },
        {
          "$ref": "#/definitions/AccessKeyConfiguration"
        }
      ]
    },
    "AccessKeyConfiguration": {
      "type": "object",
      "required": [
        "type"
      ],
      "description": "An authorization granted to a user",
      "properties": {
        "account": {
          "description": "A reference to the account to which the access key authorizes",
          "$ref": "#/definitions/AccountHref"
        },
        "expiry": {
          "$ref": "#/definitions/Timestamp",
          "description": "The time at which the access key expires"
        },
        "type": {
          "description": "The type of key. Currently, only 'bearer' tokens are supported",
          "type": "string",
          "enum": [
            "bearer"
          ],
          "default": "bearer"
        }
      }
    },
    "AccessKeySecret": {
      "allOf": [
        {
          "$ref": "#/definitions/AccessKey"
        },
        {
          "type": "object",
          "properties": {
            "secret_key": {
              "description": "The secret part of the authorization",
              "type": "string"
            }
          }
        }
      ]
    },
    "AccessKeyState": {
      "type": "object",
      "properties": {
        "durability": {
          "description": "The durability of the key.",
          "type": "string",
          "enum": [
            "persistent",
            "session"
          ]
        },
        "href": {
          "type": "string",
          "description": "A reference to this key"
        },
        "last_used": {
          "description": "The last time at which the key was used for access",
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "Account": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/AccountConfiguration"
        },
        {
          "$ref": "#/definitions/AccountIdentity"
        }
      ],
      "additionalProperties": false
    },
    "AccountConfiguration": {
      "type": "object",
      "properties": {
        "billing_service": {
          "$ref": "#/definitions/BillingService"
        },
        "stratus_id": {
          "type": [
            "null",
            "string"
          ],
          "description": "Identification for stratus accounts"
        },
        "name": {
          "type": "string",
          "description": "The name associated with an account."
        },
        "log_retention": {
          "type": "array",
          "description": "An array of account log retention configuration.",
          "items": {
            "$ref": "#/definitions/AccountLogRetention"
          }
        }
      },
      "additionalProperties": false
    },
    "AccountHref": {
      "type": "string",
      "description": "A reference to an account",
      "pattern": "^\\/v2\\/accounts\\/[a-z0-9]+$"
    },
    "AccountIdentity": {
      "type": "object",
      "required": [
        "href",
        "id"
      ],
      "properties": {
        "href": {
          "$ref": "#/definitions/AccountHref"
        },
        "id": {
          "type": "string",
          "description": "Deprecated. A unique identifier for the account."
        }
      },
      "additionalProperties": false
    },
    "AccountLogRetention": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of log retention",
          "enum": [
            "events"
          ]
        },
        "online_days": {
          "type": "integer",
          "description": "Number of online days",
          "minimum": 1
        },
        "archive_days": {
          "type": "integer",
          "description": "Number of archive days",
          "minimum": 1
        },
        "online_space_allowance": {
          "type": "integer",
          "description": "Allowance for online space",
          "minimum": 1
        },
        "archive_space_allowance": {
          "type": "integer",
          "description": "Allowance for archive space",
          "minimum": 1
        }
      }
    },
    "AccountPatch": {
      "type": "object",
      "description": "Specifies attributes of an account to be updated.",
      "$ref": "#/definitions/AccountConfiguration"
    },
    "AccountPost": {
      "type": "object",
      "description": "Specifies attributes of an account to be posted.",
      "allOf": [
        {
          "required": [
            "name"
          ]
        },
        {
          "$ref": "#/definitions/AccountConfiguration"
        }
      ]
    },
    "Action": {
      "description": "An action to be executed on a referenced subject",
      "type": "object",
      "allOf": [
        {
          "required": [
            "id",
            "url"
          ]
        },
        {
          "$ref": "#/definitions/ActionKey"
        },
        {
          "$ref": "#/definitions/ActionConfiguration"
        }
      ]
    },
    "ActionConfiguration": {
      "description": "Configuration for an action",
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "An http/https URL giving the address of the agent receiving the request to initiate the action",
          "pattern": "^https?://[^/]+/.*$"
        },
        "name": {
          "type": "string",
          "description": "A human-readable name. If not specified, a name will be generated from the id"
        },
        "http_method": {
          "type": "string",
          "description": "The request method name to be used when making the action request to an agent. Usually POST. Defaults to POST",
          "default": "POST",
          "minLength": 1
        },
        "description": {
          "type": "string",
          "description": "A textual description of an action. This should describe the effect of the action because it will be presented to the operator who requests running the action before confirming it"
        },
        "secret_key": {
          "type": "string",
          "description": "A key used to sign requests made to an agent. This is 44 characters (32-bytes, base64-encoded). If not specified, a secret will be generated at creation",
          "pattern": "^[A-Za-z0-9+/]+={0,3}$"
        },
        "certificates": {
          "type": "string",
          "description": "A chain of PEM-encoded certificates that can be used to authenticate the agent receiving action requests. If the agent uses a publicly valid X509 certificate that matches the hostname specified in its URL, then this is not needed. This is necessary for self-signed certificates using HTTPS, because the agent is always authenticated. Multiple certificates may be used, for example, when migrating from one certificate to another"
        }
      }
    },
    "ActionKey": {
      "type": "object",
      "properties": {
        "id": {
          "description": "An unchanging identifier for an action that is used when creating a task to run it. All action ids for a subject must be unique",
          "type": "string",
          "pattern": "^[a-z]([a-z0-9-]*[a-z0-9])$"
        }
      }
    },
    "Actions": {
      "description": "An array of actions",
      "type": "array",
      "items": {
        "$ref": "#/definitions/Action"
      }
    },
    "AddressSet": {
      "type": "object",
      "description": "An address set record details",
      "allOf": [
        {
          "$ref": "#/definitions/AddressSetState"
        },
        {
          "$ref": "#/definitions/AddressSetConfiguration"
        },
        {
          "type": "object",
          "properties": {
            "entries": {
              "$ref": "#/definitions/AddressSetEntry"
            }
          }
        }
      ]
    },
    "Address": {
      "description": "IP address",
      "type": "string",
      "pattern": "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))?$"
    },
    "AddressSetConfiguration": {
      "type": "object",
      "description": "An address set record details",
      "properties": {
        "name": {
          "description": "The name of the address set",
          "type": "string",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Description of the addresses contained in the address set",
          "maxLength": 500
        },
        "type": {
          "description": "The type of the address set:\n  A 'manual' address set type implies that it includes IP addresses/CIDR values that are statically defined by the user or the system.\n  A 'dynamic' address set type is one where the IP addresses are dynamically added by the system (e.g. via a web control). Addresses may not be edited for a 'dynamic' address set. A 'combined' set is composed of other sets using the 'inclusions' attribute. A 'text-file' type gets addresses using a 'url' and 'interval' specified in 'params'. A 'json-file' type gets addresses using a 'url', 'interval', and 'query' specified in 'params'",
          "type": "string",
          "enum": [
            "combined",
            "domains",
            "dynamic",
            "json-file",
            "manual",
            "text-file"
          ]
        },
        "entries": {
          "type": "array",
          "description": "List of address entries that are part of this address set",
          "items": {
            "$ref": "#/definitions/AddressSetEntryConfiguration"
          }
        },
        "inclusions": {
          "type": "array",
          "description": "List of other address set references that are included in this address set, valid only for 'combined' types",
          "items": {
            "$ref": "#/definitions/AddressSetHref"
          }
        },
        "parameters": {
          "description": "Parameters for configuring an address set",
          "$ref": "#/definitions/AddressSetParameters"
        }
      },
      "additionalProperties": false
    },
    "AddressSetDomainsParameters": {
      "type": "object",
      "description": "Parameters for domains address set type",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "description": "If a forward-confirmed reverse DNS lookup of a tested address belongs to one of these domains, then the address is considered to belong to the set",
          "items": {
            "$ref": "#/definitions/DomainName"
          },
          "minItems": 1,
          "uniqueItems": true
        }
      },
      "additionalProperties": false
    },
    "AddressSetEntry": {
      "type": "object",
      "description": "An IP address or a CIDR block",
      "allOf": [
        {
          "$ref": "#/definitions/AddressSetEntryState"
        },
        {
          "$ref": "#/definitions/AddressSetEntryConfiguration"
        }
      ]
    },
    "AddressSetEntryConfiguration": {
      "type": "object",
      "description": "Configuration for address entries for address sets",
      "required": [
        "address"
      ],
      "properties": {
        "description": {
          "type": "string",
          "description": "Description of the address"
        },
        "address": {
          "$ref": "#/definitions/Cidr"
        },
        "expiry": {
          "$ref": "#/definitions/Timestamp",
          "description": "Expiry time associated with this address"
        }
      }
    },
    "AddressSetEntryState": {
      "type": "object",
      "description": "State values for address entries for address sets",
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Creation time associated with this address"
        },
        "created_by": {
          "type": "string",
          "description": "Reference to the user that created this id"
        }
      }
    },
    "AddressSetHref": {
      "type": "string",
      "pattern": "^\\/v2\\/address-sets\\/[a-z0-9]+$",
      "description": "The endpoint for an address set resource"
    },
    "AddressSetJsonFileParameters": {
      "type": "object",
      "description": "Parameters for json-file address set type",
      "required": [
        "interval",
        "query",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "A URL from which a JSON object is read",
          "pattern": "^https?://[a-z].*$"
        },
        "interval": {
          "type": "integer",
          "description": "An interval, given in seconds, that sets the frequency at which the set is updated",
          "minimum": 60
        },
        "query": {
          "type": "string",
          "description": "A JMESPath expression (http://jmespath.org) that is used to extract addresses. This expression applied over the result of fetching a url must produce an array of IP addresses or CIDR blocks"
        }
      },
      "additionalProperties": false
    },
    "AddressSetParameters": {
      "description": "Parameters for configuring an address set",
      "oneOf": [
        {
          "$ref": "#/definitions/AddressSetJsonFileParameters"
        },
        {
          "$ref": "#/definitions/AddressSetTextFileParameters"
        },
        {
          "$ref": "#/definitions/AddressSetDomainsParameters"
        }
      ]
    },
    "AddressSetPatch": {
      "type": "object",
      "description": "An address set record details to update",
      "allOf": [
        {
          "$ref": "#/definitions/AddressSetConfiguration"
        }
      ]
    },
    "AddressSetPost": {
      "type": "object",
      "description": "An address set record details needed to create a new set",
      "allOf": [
        {
          "required": [
            "name",
            "type"
          ]
        },
        {
          "$ref": "#/definitions/AddressSetConfiguration"
        }
      ]
    },
    "AddressSetState": {
      "type": "object",
      "required": [
        "href",
        "created",
        "updated"
      ],
      "properties": {
        "href": {
          "$ref": "#/definitions/AddressSetHref"
        },
        "owner": {
          "type": "string",
          "description": "A reference to an account that owns an address set"
        },
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Address set created time"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp",
          "description": "Timestamp reflecting when the address set was last updated"
        }
      }
    },
    "AddressSetTextFileParameters": {
      "type": "object",
      "description": "Parameters for text-file address set type",
      "required": [
        "interval",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "A URL from which addresses are retrieved",
          "pattern": "^https?://[a-z].*$"
        },
        "interval": {
          "type": "integer",
          "description": "An interval, given in seconds, that sets the frequency at which the set is updated",
          "minimum": 60
        }
      },
      "additionalProperties": false
    },
    "Alias": {
      "description": "Alias for an application",
      "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$",
      "type": "string"
    },
    "AnyObject": {
      "description": "Any JSON object.",
      "type": "object"
    },
    "ApplicationLogRetention": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of log retention",
          "enum": [
            "default",
            "cdn",
            "custom",
            "csp-reports",
            "pageviews",
            "proxy-logs"
          ]
        },
        "online_days": {
          "type": "integer",
          "description": "Number of online days",
          "minimum": 1
        },
        "archive_days": {
          "type": "integer",
          "description": "Number of archive days",
          "minimum": 1
        },
        "online_space_allowance": {
          "type": "integer",
          "description": "Allowance for online space",
          "minimum": 1
        },
        "archive_space_allowance": {
          "type": "integer",
          "description": "Allowance for archive space",
          "minimum": 1
        }
      }
    },
    "ApplicationTest": {
      "description": "An Application Test contains test information",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/ApplicationTestingInitializer"
        },
        {
          "$ref": "#/definitions/ApplicationTestingIdentity"
        },
        {
          "$ref": "#/definitions/ApplicationTestConfiguration"
        },
        {
          "$ref": "#/definitions/ApplicationTestState"
        }
      ]
    },
    "ApplicationTestingInitializer": {
      "description": "ID for an application test",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "description": "ID of the test",
          "pattern": "^[a-z]([-a-z0-9]*[a-z0-9])?$"
        }
      }
    },
    "ApplicationTestingIdentity": {
      "description": "Identifier for an application test",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to the test",
          "pattern": "^/v2/tests/[a-z]([-a-z0-9]*[a-z0-9])?$"
        }
      }
    },
    "ApplicationTestPost": {
      "description": "The fields required to run the test",
      "additionalProperties": true,
      "required": [
        "id",
        "duration",
        "virtualUsers",
        "assignCost"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "ID of the test",
          "pattern": "^[a-z]([-a-z0-9]*[a-z0-9])?$",
          "maxLength": 50
        },
        "duration": {
          "type": "integer",
          "description": "Duration to run the test in seconds",
          "minimum": 1
        },
        "virtualUsers": {
          "type": "integer",
          "description": "Virtual users to be created when test runs",
          "minimum": 1
        },
        "assignCost": {
          "type": "boolean",
          "description": "Determines if this test run will be charged to the account that ran it",
          "default": true
        },
        "targets": {
          "type": "string",
          "description": "target application ID to be used to send requests"
        }
      }
    },
    "ApplicationTestState": {
      "type": "object",
      "description": "State for an application test",
      "additionalProperties": false,
      "properties": {
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "Time when the test was created"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "description": "Time when the test was last updated"
        }
      }
    },
    "ApplicationTestConfiguration": {
      "type": "object",
      "description": "ID for an application test",
      "additionalProperties": false,
      "properties": {
        "attrs": {
          "type": "object",
          "description": "User configured parameters for the test"
        },
        "description": {
          "type": "string",
          "description": "Short description of the test"
        }
      }
    },
    "MainApplicationTestConfiguration": {
      "description": "Json configuration for main application test file.",
      "type": "object",
      "required": [
        "probabilities",
        "models"
      ],
      "properties": {
        "probabilities": {
          "type": "object",
          "description": "Probability a particular session will run",
          "additionalProperties": {
            "type": "number"
          }
        },
        "users": {
          "type": "array",
          "description": "Users credentials to be used for the requests",
          "items": {
            "$ref": "#/definitions/ApplicationTestUser"
          }
        },
        "models": {
          "type": "object",
          "description": "Properties of each session.",
          "additionalProperties": {
            "type": "object",
            "oneOf": [
              {
                "description": "Application Test session property.",
                "additionalProperties": false,
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "File path for test configuration"
                  }
                }
              },
              {
                "$ref": "#/definitions/SessionTypeConfiguration"
              }
            ]
          }
        },
        "parameters": {
          "type": "object",
          "description": "Additional parameters configured by user.",
          "additionalProperties": {
            "type": "object",
            "$ref": "#/definitions/ApplicationTestParameters"
          }
        }
      }
    },
    "ApplicationTestUser": {
      "description": "User credentials for requests",
      "type": "object",
      "required": [
        "username",
        "password"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the user"
        },
        "username": {
          "type": "string",
          "description": "Username of the user"
        },
        "password": {
          "type": "string",
          "description": "Password for the described username"
        }
      }
    },
    "ApplicationTestParameters": {
      "description": "User configured parameter.",
      "type": "object",
      "required": [
        "type",
        "description",
        "title"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of the parameter",
          "enum": [
            "string",
            "integer",
            "number",
            "boolean"
          ]
        },
        "title": {
          "type": "string",
          "description": "Title associated with the parameter"
        },
        "description": {
          "type": "string",
          "description": "Description of the parameter"
        }
      }
    },
    "SessionTypeConfiguration": {
      "type": "object",
      "description": "Single session for application-test",
      "required": [
        "requests",
        "type"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the session"
        },
        "requests": {
          "type": "array",
          "description": "An array of requests in a session.",
          "items": {
            "$ref": "#/definitions/ApplicationTestRequest"
          }
        },
        "constants": {
          "type": "array",
          "description": "An array of constants to be called after each request",
          "items": {
            "$ref": "#/definitions/ApplicationTestRequest"
          }
        },
        "length": {
          "type": "number",
          "description": "Number of requests a particular session will send",
          "minimum": 0
        },
        "type": {
          "type": "string",
          "description": "Type of session random or static",
          "enum": [
            "user.RandomSession",
            "user.StaticSession"
          ]
        },
        "wait-time": {
          "type": "integer",
          "description": "Wait time after each request",
          "minimum": 1
        }
      }
    },
    "ApplicationTestRequest": {
      "type": "object",
      "description": "Describes a single request in a session",
      "required": [
        "name",
        "method",
        "url"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the request"
        },
        "headers": {
          "type": "object",
          "description": "Request header to set",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "method": {
          "type": "string",
          "description": "Http request method",
          "enum": [
            "GET",
            "POST",
            "PUT",
            "PATCH",
            "DELETE",
            "HEAD"
          ]
        },
        "url": {
          "type": "string",
          "description": "Url of the request",
          "format": "uri"
        },
        "probability": {
          "type": "number",
          "description": "Probability of the request to be picked"
        },
        "wait": {
          "type": "boolean",
          "description": "Wait after the request or not"
        },
        "cookies": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "description": "An array of requests in a session.",
              "items": {
                "$ref": "#/definitions/ApplicationTestCookie"
              }
            }
          ]
        },
        "injections": {
          "type": "array",
          "description": "An array of injections in a session.",
          "items": {
            "$ref": "#/definitions/ApplicationTestInjections"
          }
        },
        "scrape": {
          "type": "array",
          "description": "An array of scrape in a session.",
          "items": {
            "$ref": "#/definitions/ApplicationTestScrape"
          }
        },
        "call-constants": {
          "type": "boolean",
          "description": "Call contansts in a request or not"
        },
        "encode": {
          "type": "boolean",
          "description": "Determine if URL is URL encoded for injections"
        }
      }
    },
    "ApplicationTestCookie": {
      "type": "object",
      "description": "Cookie to be used in request",
      "required": [
        "name",
        "value"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the cookie"
        },
        "value": {
          "type": "string",
          "description": "Value of the cookie"
        },
        "Max-Age": {
          "type": "integer",
          "description": "Max age of cookie"
        },
        "Path": {
          "type": "string",
          "description": "Path of the cookie"
        }
      }
    },
    "ApplicationTestInjections": {
      "type": "object",
      "description": "Injections allow injecting data from previous responses into the next outgoing request",
      "required": [
        "from",
        "location"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "Injection from",
          "enum": [
            "formdata",
            "cookie",
            "header",
            "inserts",
            "forminject"
          ]
        },
        "location": {
          "type": "string",
          "description": "Injection location",
          "enum": [
            "formdata",
            "cookie",
            "header",
            "forminject",
            "url",
            "body"
          ]
        },
        "name": {
          "type": "string",
          "description": "Name of injection"
        },
        "from-name": {
          "type": "string",
          "description": "Injection from name"
        }
      }
    },
    "ApplicationTestScrape": {
      "type": "object",
      "description": "Scrapes allow scraping data from a response so it can be injected into later requests",
      "required": [
        "id",
        "sep-start",
        "sep-end",
        "insertid"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "String is that is searched for in the response. If found, it is scraped."
        },
        "sep-start": {
          "type": "string",
          "description": "The beginning token to split the element."
        },
        "sep-end": {
          "type": "string",
          "description": "The last token to split the element."
        },
        "insertid": {
          "type": "string",
          "description": "Insert ID of scrape"
        },
        "transform": {
          "type": "array",
          "description": "An array of transform.",
          "items": {
            "$ref": "#/definitions/ApplicationTestTransform"
          }
        }
      }
    },
    "ApplicationTestTransform": {
      "type": "object",
      "description": "Transform",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Transform type",
          "enum": [
            "transform.DecodeBase64",
            "transform.MultiTransform",
            "transform.DecodeJSONandSelect"
          ]
        },
        "config": {
          "type": "object",
          "description": "Transform object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "Application": {
      "description": "An application configuration and its state.",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ApplicationIdentifier"
        },
        {
          "$ref": "#/definitions/ApplicationInitializer"
        },
        {
          "$ref": "#/definitions/ApplicationState"
        },
        {
          "$ref": "#/definitions/ApplicationConfiguration"
        }
      ]
    },
    "ApplicationCheckResult": {
      "type": "object",
      "description": "The result of running a check for an application",
      "properties": {
        "url": {
          "type": "string",
          "description": "The url being checked",
          "format": "uri"
        },
        "components": {
          "type": "array",
          "description": "The state of the components that were checked",
          "items": {
            "$ref": "#/definitions/ApplicationComponent"
          }
        },
        "probe_results": {
          "type": "array",
          "description": "The result of probes on individual servers",
          "items": {
            "$ref": "#/definitions/ApplicationProbeResult"
          }
        }
      }
    },
    "ApplicationComponent": {
      "type": "object",
      "description": "A logical component of the application",
      "properties": {
        "probed_addresses": {
          "type": "array",
          "description": "The public addresses that have been probed",
          "items": {
            "type": "string",
            "format": "ipv4"
          }
        },
        "description": {
          "type": "string",
          "description": "A brief description of the component"
        },
        "messages": {
          "type": "array",
          "description": "Messages reflecting the status of the component",
          "items": {
            "$ref": "#/definitions/ApplicationComponentMessage"
          }
        },
        "type": {
          "type": "string",
          "description": "The type of component. The current types are: dns|adc|application|unknown_proxies|unknown_servers|cloudflare_proxies|cloudflare_servers. Additional types may be added in the future."
        },
        "status": {
          "type": "string",
          "description": "The status of the component. Can be operational|degraded|partially_disrupted|disrupted"
        }
      }
    },
    "ApplicationComponentMessage": {
      "type": "object",
      "description": "A message for an application component",
      "properties": {
        "content": {
          "type": "string",
          "description": "The text content of the message"
        },
        "severity": {
          "type": "string",
          "description": "The description of the message"
        }
      }
    },
    "ApplicationConfiguration": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the application.",
          "minLength": 1,
          "maxLength": 255
        },
        "aliases": {
          "type": "array",
          "description": "Ordered array of application domain names.  The first array entry will be used as the primary application domain name.",
          "items": {
            "type": "string",
            "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$"
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "bot_management": {
          "type": "object",
          "description": "Configuration for the Bot Management",
          "$ref": "#/definitions/BotManagement"
        },
        "cdn_aliases": {
          "type": "array",
          "description": "Array of application domain names published to CDN.",
          "items": {
            "type": "string",
            "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$"
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "components": {
          "type": "array",
          "description": "List of resource layers that are attached to this application. Examples of such resources include EC2 or RDS instances available in an AWS cloud provider.",
          "items": {
            "$ref": "#/definitions/Component"
          }
        },
        "cdn_configuration": {
          "type": "object",
          "description": "Configuration for the CDN distribution.",
          "$ref": "#/definitions/CdnConfiguration"
        },
        "cdn_ready": {
          "type": "boolean",
          "description": "True when a delivery = cdn has been configured and is ready."
        },
        "cdn_service": {
          "description": "A href to the cdn service configured for the application.",
          "type": "string",
          "pattern": "^\\/v2\\/services\\/[a-z0-9]+$"
        },
        "default_hostname": {
          "description": "The default alias for an application.",
          "$ref": "#/definitions/Alias"
        },
        "dns_service": {
          "description": "A href to the dns service configured for the application.",
          "type": [
            "null",
            "string"
          ],
          "pattern": "^\\/v2\\/services\\/[a-z0-9]+$"
        },
        "servers_hostname": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/ServersHostname"
            }
          ]
        },
        "delivery": {
          "type": "string",
          "description": "The mode of delivery for an application. One of 'cdn', 'without-cdn', or 'rewrite-to-cdn'. The 'rewrite-to-cdn' mode is not recommended for new applications",
          "enum": [
            "cdn",
            "rewrite-to-cdn",
            "without-cdn"
          ]
        },
        "enable_cdn": {
          "type": "boolean",
          "description": "Enable CDN for the application. This is not used if the 'delivery' attribute is set",
          "default": true
        },
        "enable_http2": {
          "type": "boolean",
          "description": "Enable HTTP2 for the application."
        },
        "enable_rum": {
          "type": "boolean",
          "description": "Enable RUM for the application."
        },
        "enable_tls": {
          "type": "boolean",
          "description": "Enable TLS for the application.  The tls_configuration is required if true.",
          "default": false
        },
        "tls_configuration": {
          "type": "object",
          "description": "TLS configuration that is applied when TLS is enabled.",
          "$ref": "#/definitions/TlsConfiguration"
        },
        "metrics": {
          "type": "array",
          "description": "Array of metric configurations attached for the application",
          "items": {
            "$ref": "#/definitions/MetricConfiguration"
          },
          "uniqueItems": true
        },
        "monitoring": {
          "$ref": "#/definitions/Monitoring"
        },
        "waf_rules": {
          "type": "array",
          "description": "The waf rules for the application.",
          "items": {
            "$ref": "#/definitions/WafFileReference"
          },
          "uniqueItems": true
        },
        "whitelist": {
          "type": "array",
          "description": "A list of addresses to always be allowed access.",
          "items": {
            "$ref": "#/definitions/AddressSetEntry"
          },
          "uniqueItems": true
        },
        "whitelist_href": {
          "$ref": "#/definitions/AddressSetHref",
          "description": "A reference to an address set. Addresses that are part of this set will always be allowed access"
        },
        "blacklist": {
          "type": "array",
          "description": "A list of addresses to be restricted access.",
          "items": {
            "$ref": "#/definitions/AddressSetEntry"
          },
          "uniqueItems": true
        },
        "blacklist_href": {
          "$ref": "#/definitions/AddressSetHref",
          "description": "A reference to an address set. Addresses that are part of this set will continue to have restricted access"
        },
        "blacklist_user_agents": {
          "type": [
            "null",
            "string"
          ],
          "description": "A regular expression of user agents to be restricted access.",
          "minLength": 0,
          "maxLength": 255
        },
        "concurrent_limit": {
          "$ref": "#/definitions/ConcurrentLimit"
        },
        "maximum_queue_time": {
          "$ref": "#/definitions/MaximumQueueTime"
        },
        "merge_slashes": {
          "$ref": "#/definitions/MergeSlashes"
        },
        "suspend_limit": {
          "$ref": "#/definitions/SuspendLimit"
        },
        "probes": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uri",
            "description": "A list of urls to be probed in application status checks."
          }
        },
        "protection": {
          "type": "string",
          "description": "The protection mode.",
          "enum": [
            "normal",
            "maximum"
          ]
        },
        "protection_captcha_retry_limit": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of incorrect attempts a user is allowed before the user may be blacklisted."
        },
        "protection_blacklist_timeout": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of seconds to enforce blacklist on the suspicious user."
        },
        "protection_microsite_file": {
          "type": "string",
          "pattern": "^\\/v2\\/files\\/[a-z0-9]+$",
          "description": "Endpoint for the file id associated with the captcha microsite."
        },
        "cluster": {
          "$ref": "#/definitions/ClusterHref",
          "description": "Application cluster."
        },
        "servers": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "array",
              "description": "Application static servers.",
              "items": {
                "$ref": "#/definitions/ApplicationServer"
              },
              "minItems": 1,
              "uniqueItems": true
            }
          ]
        },
        "page_controls": {
          "type": "array",
          "description": "An array of specific mode page controls processed in sequence to modify the behavior of request processing",
          "items": {
            "$ref": "#/definitions/PageControlConfiguration"
          },
          "minItems": 0,
          "uniqueItems": true
        },
        "request_timeout": {
          "type": "integer",
          "description": "Time for which Webscale proxy will wait for a backend server to respond. If proxy does not receive response in a specified time from the backend server, a maintenance page with status 502 Bad Gateway will be returned",
          "minimum": 1,
          "maximum": 60,
          "default": 30
        },
        "shields": {
          "type": "array",
          "description": "A list of href's referencing firewalls that can be enabled/disabled for the application.",
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/FirewallHref"
              },
              {
                "$ref": "#/definitions/SecurityGroupHref"
              }
            ]
          }
        },
        "shields_include_whitelist": {
          "type": "boolean",
          "description": "Add whitelist addresses to shields. By default whitelist addresses are not added to the shields. Google cloud supports only IPv4 addresses in their firewall rules. Any IPv6 addresses in the whitelist will not be added to the firewall rules for Google. AWS supports both IPv4 and IPv6 addresses in the security groups",
          "default": false
        },
        "site_cache": {
          "oneOf": [
            {
              "type": "null",
              "description": "Empty Site Cache"
            },
            {
              "description": "A configuration for Dynamic Site Cache",
              "$ref": "#/definitions/SiteCache"
            }
          ]
        },
        "trusted_proxies": {
          "oneOf": [
            {
              "type": "null",
              "description": "Partial trust of all peers. The client address from the X-Forwarded-For header is presented as request_address and can be used for blacklisting, but is otherwise ignored"
            },
            {
              "description": "Trust only the referenced peers. The client address from the X-Forwarded-For header is accepted provided that the peer address is in one of the referenced sets, but otherwise ignored. If the array is empty, then no proxies are trusted and the X-Forwarded-For header is ignored.",
              "type": "array",
              "items": {
                "$ref": "#/definitions/AddressSetHref"
              },
              "uniqueItems": true
            }
          ]
        },
        "data_planes": {
          "type": "array",
          "description": "Configured data planes",
          "items": {
            "type": "string",
            "description": "A reference to the data plane.",
            "pattern": "^/v2/data-planes/[a-z0-9]+$"
          },
          "minItems": 1,
          "maxItems": 1
        },
        "trusted_proxies_only": {
          "type": "boolean",
          "description": "Allows external traffic only from addresses from the configured trusted proxies, the control addresses, and pingdom.",
          "default": false
        },
        "trusted_proxies_header": {
          "type": "string",
          "description": "The name of the header from a trusted proxy that is used to obtain the request address. When not set, X-Forwarded-For is used.",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "labels": {
          "type": "array",
          "description": "Array of labels that will be attached to the application.",
          "items": {
            "$ref": "#/definitions/Label"
          }
        },
        "translate_path": {
          "$ref": "#/definitions/TranslatePath",
          "default": "preserve"
        },
        "pagespeed_disallow": {
          "type": "array",
          "description": "A set of URL patterns to exclude from pagespeed optimization",
          "items": {
            "type": "string",
            "pattern": "(?:[\\w.\\-~!$&'()*+,;=:@?/]|%[A-Fa-f0-9]{2})*"
          }
        },
        "pagespeed_exclude_agents": {
          "type": "string",
          "description": "User agents that match this regular expression are excluded from pagespeed"
        },
        "pagespeed_map_proxy_domains": {
          "type": "array",
          "description": "A set of domains that are integrated into the pages for this site",
          "items": {
            "type": "string",
            "pattern": "(https?://)?(?:[\\w_\\-]{1,63}\\.){1,}[\\w_\\-]{2,63}(?:/(?:[\\w.\\-~!$&'()*+,;=:@?/]|%[A-Fa-f0-9]{2})*)?"
          }
        },
        "microsite": {
          "description": "A reference to the file that the application will use as its default microsite.",
          "$ref": "#/definitions/FileHref"
        },
        "web_controls": {
          "type": "array",
          "description": "An array of specific mode web controls processed in sequence to modify the behavior of request processing",
          "items": {
            "$ref": "#/definitions/WebControlConfiguration"
          },
          "minItems": 0,
          "uniqueItems": true
        },
        "stratus_id": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "string",
              "description": "Identification for stratus applications"
            }
          ]
        },
        "log_retention": {
          "type": "array",
          "description": "An array of application log retention configuration objects",
          "items": {
            "$ref": "#/definitions/ApplicationLogRetention"
          }
        }
      }
    },
    "ApplicationHref": {
      "type": "string",
      "pattern": "^\\/v2\\/applications\\/[a-z0-9]+$",
      "description": "The endpoint for the application resource."
    },
    "ApplicationIdentifier": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/Resource"
        }
      ]
    },
    "ApplicationInitializer": {
      "type": "object",
      "properties": {
        "endpoint": {
          "type": "string",
          "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){2,}[a-zA-Z0-9-]{2,}$",
          "description": "The DNS endpoint for the application."
        },
        "subscriptions": {
          "type": "array",
          "description": "Plans that this application will be subscribed to.",
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/SubscriptionReadWrite"
              },
              {
                "type": "string",
                "description": "Plan name",
                "minLength": 1
              }
            ]
          },
          "minItems": 1,
          "uniqueItems": true
        }
      }
    },
    "ApplicationLog": {
      "type": "object",
      "required": [
        "from",
        "group",
        "records",
        "to"
      ],
      "properties": {
        "from": {
          "$ref": "#/definitions/Timestamp"
        },
        "group": {
          "type": "object",
          "required": [
            "fields",
            "result"
          ],
          "properties": {
            "fields": {
              "type": "array",
              "description": "A list of attribute names specified by the 'groupselect' parameter in the request.",
              "items": {
                "type": "string"
              }
            },
            "result": {
              "type": "array",
              "description": "A list with each item containing a list of attribute values for the fields included the 'fields' attribute.",
              "items": {
                "type": "object"
              }
            }
          }
        },
        "records": {
          "type": "object",
          "required": [
            "count",
            "fields",
            "result",
            "start"
          ],
          "properties": {
            "count": {
              "type": "number",
              "description": "Number of items included in the result."
            },
            "fields": {
              "type": "object",
              "description": "A list of attribute names specified by the 'select' parameter in the request."
            },
            "next": {
              "type": "number",
              "description": "The starting record number representing the first item not already included in the 'result'. This is the value that must be specified as the 'start' value to fetch consecutive result records. This value along with the 'start' value enables server side pagination amongst the result records."
            },
            "result": {
              "type": "array",
              "description": "A list with each item containing a list of attribute values for the fields included the 'fields' attribute.",
              "items": {
                "type": "object"
              }
            },
            "start": {
              "type": "number",
              "description": "The starting record number representing the first item included in the 'result'. This will mirror the 'start' value specified in the request. This value alogn with the 'next' value enables server side pagination amongst the result records. The first record starts at 1."
            }
          }
        },
        "to": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "ApplicationPatch": {
      "$ref": "#/definitions/ApplicationConfiguration"
    },
    "ApplicationPost": {
      "type": "object",
      "required": [
        "name",
        "aliases"
      ],
      "allOf": [
        {
          "$ref": "#/definitions/ApplicationInitializer"
        },
        {
          "$ref": "#/definitions/ApplicationConfiguration"
        }
      ]
    },
    "ApplicationPost_logs": {
      "oneOf": [
        {
          "type": "object",
          "$ref": "#/definitions/LogPost"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/LogPost"
          }
        }
      ]
    },
    "ApplicationPost_subscriptions": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/SubscriptionReadWrite"
        }
      ]
    },
    "ApplicationProbeResult": {
      "type": "object",
      "description": "The results of an individual server probe.",
      "properties": {
        "address": {
          "type": "string",
          "format": "ipv4",
          "description": "The public address of the server being probed."
        },
        "result": {
          "type": "string",
          "description": "A message indicating the result of the probe."
        },
        "response_time": {
          "type": "number",
          "format": "float",
          "description": "How long the request took in milliseconds."
        },
        "redirect_location": {
          "type": "string",
          "format": "uri",
          "description": "If the server responds with a redirect, the redirect location is returned."
        },
        "success": {
          "type": "boolean",
          "description": "True if the probe is considered successful, false otherwise"
        }
      }
    },
    "ApplicationServer": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/Server"
        },
        {
          "properties": {
            "description": {
              "type": "string",
              "description": "Description of the server.",
              "default": "",
              "minLength": 0,
              "maxLength": 255
            }
          }
        }
      ]
    },
    "ApplicationState": {
      "type": "object",
      "required": [
        "created",
        "current_outage",
        "state"
      ],
      "properties": {
        "cdn_state": {
          "description": "The current state of the CDN assigned to the application.  This field can be null.",
          "type": "string",
          "default": "null"
        },
        "challenges": {
          "description": "The challenges used to verify ownership of application aliases.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Challenge"
          }
        },
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Application created time."
        },
        "current_outage": {
          "type": "boolean",
          "description": "Indicates if the application is currently experiencing an outage.",
          "default": false
        },
        "last_outage": {
          "$ref": "#/definitions/Timestamp",
          "description": "Last time the application was down."
        },
        "stage": {
          "type": "string",
          "description": "The stage that the application is in.",
          "enum": [
            "initial",
            "configured"
          ]
        },
        "state": {
          "type": "string",
          "description": "The current state of the application.",
          "enum": [
            "running",
            "maintenance",
            "entering_maintenance",
            "exiting_maintenance",
            "starting",
            "stopped",
            "stopping"
          ]
        }
      }
    },
    "ApplicationStatus": {
      "type": "array",
      "description": "The checks that were run in querying status for an application",
      "items": {
        "$ref": "#/definitions/ApplicationCheckResult"
      }
    },
    "ApplicationWafLog": {
      "type": "object",
      "required": [
        "download_url"
      ],
      "properties": {
        "download_url": {
          "type": "string",
          "description": "A URL for the requested application logs."
        }
      }
    },
    "ArchivedLog": {
      "type": "object",
      "description": "Archived log information",
      "required": [
        "href",
        "ranges"
      ],
      "properties": {
        "href": {
          "type": "string",
          "description": "The endpoint for the resource"
        },
        "ranges": {
          "type": "array",
          "description": "Details of the available archived logs.",
          "items": {
            "$ref": "#/definitions/Range"
          }
        }
      }
    },
    "ArchivedLogs": {
      "type": "array",
      "description": "The available archived logs.",
      "items": {
        "$ref": "#/definitions/ArchivedLog"
      }
    },
    "AuthorizationAccount": {
      "type": "object",
      "description": "The account for which an authorization is to be created",
      "required": [
        "account"
      ],
      "properties": {
        "account": {
          "$ref": "#/definitions/AccountHref",
          "description": "A reference to the account to be authorized"
        }
      }
    },
    "Billing": {
      "type": "object",
      "description": "Billing information for an account.",
      "required": [
        "invoices",
        "payments"
      ],
      "properties": {
        "invoices": {
          "type": "array",
          "description": "A list of invoices for the account in descending order by due_date.",
          "items": {
            "$ref": "#/definitions/InvoiceItem"
          }
        },
        "payments": {
          "type": "array",
          "description": "A list of payments for the account in descending order by date.",
          "items": {
            "$ref": "#/definitions/PaymentItem"
          }
        }
      }
    },
    "BillingService": {
      "oneOf": [
        {
          "type": "null",
          "description": "There is no billing service associated with the account."
        },
        {
          "type": "object",
          "required": [
            "type",
            "quickbooks_id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "description": "Type of billing service used for the account",
              "enum": [
                "quickbooks"
              ]
            },
            "quickbooks_id": {
              "type": "integer",
              "description": "Id of the account in quickbooks"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "Blacklist": {
      "type": "array",
      "description": "A list of addresses for which access is restricted.",
      "items": {
        "$ref": "#/definitions/BlacklistItem"
      },
      "uniqueItems": true
    },
    "BlacklistItem": {
      "type": "object",
      "required": [
        "address",
        "description"
      ],
      "properties": {
        "address": {
          "$ref": "#/definitions/Cidr",
          "description": "An ip address to be black listed."
        },
        "description": {
          "type": "string",
          "description": "A description of the black listed address."
        },
        "expiry": {
          "type": "string",
          "description": "An iso8601 compatible timestamp for when the blacklist should expire.",
          "format": "date-time"
        }
      }
    },
    "BlacklistItemPut": {
      "type": "object",
      "required": [
        "description"
      ],
      "properties": {
        "description": {
          "type": "string",
          "description": "A description of the black listed address."
        },
        "expiry": {
          "type": "string",
          "description": "An iso8601 compatible timestamp for when the blacklist should expire.",
          "format": "date-time"
        }
      }
    },
    "Blueprint": {
      "type": "object",
      "description": "The endpoint resource reference to the blueprint of the servers.\n",
      "properties": {
        "files": {
          "type": "array",
          "description": "A set of files to be made available on servers created with this blueprint.",
          "items": {
            "$ref": "#/definitions/MetadataFileEntry"
          }
        },
        "identity": {
          "$ref": "#/definitions/IdentityConfiguration",
          "description": "Identity to be assigned to cluster servers."
        },
        "image": {
          "$ref": "#/definitions/ProviderResourceHref",
          "description": "Object endpoint resource reference for the image being specified.\n"
        },
        "instance_template": {
          "$ref": "#/definitions/InstanceTemplate",
          "description": "Object endpoint resource reference for instance template being specified.\n"
        },
        "instance_type": {
          "$ref": "#/definitions/ProviderResourceHref",
          "description": "Object endpoint resource reference for the instance type being specified.\n"
        },
        "metadata": {
          "type": "array",
          "description": "A set of key/value pairs that will be provided to servers created with this blueprint. Server blueprint metadata overrides the cluster metadata on a key-by-key basis.",
          "items": {
            "$ref": "#/definitions/MetadataEntry"
          }
        },
        "networks": {
          "type": "array",
          "description": "List of network or subnet endpoint resource references to associate the server with. Network availability may be limited to specific zones depending on the cloud provider.\n",
          "items": {
            "$ref": "#/definitions/ProviderResourceHref"
          }
        },
        "network_tags": {
          "type": "array",
          "description": "List of network tags to associate with the server. Only applicable for Google provider.",
          "items": {
            "type": "string"
          }
        },
        "placement": {
          "$ref": "#/definitions/PlacementHref",
          "description": "Object endpoint resource reference for server creation.\n"
        },
        "provider": {
          "description": "Provider used to create the blueprint.\n",
          "$ref": "#/definitions/Provider"
        },
        "security_groups": {
          "type": "array",
          "description": "List of security group endpoint resource references to associate with the server. Only applicable for AWS provider.",
          "items": {
            "$ref": "#/definitions/SecurityGroupHref"
          }
        },
        "storage_account": {
          "$ref": "#/definitions/ProviderResourceHref",
          "description": "Storage account reference."
        },
        "zone": {
          "$ref": "#/definitions/ProviderResourceHref",
          "description": "Deprecated. Must use placement instead of zones. Object endpoint resource reference for the zone being specified.\n"
        }
      },
      "additionalProperties": false
    },
    "BootstrapConfiguration": {
      "type": "object",
      "required": [
        "file",
        "command"
      ],
      "properties": {
        "file": {
          "$ref": "#/definitions/FileHref",
          "description": "Cloud Init payload (.tar.gz) to deliver on all newly commissioned servers."
        },
        "command": {
          "type": "string",
          "description": "Cloud Init command to run once the server is commissioned.",
          "minLength": 1
        }
      }
    },
    "BotManagement": {
      "type": "object",
      "required": [
        "user_agent"
      ],
      "properties": {
        "user_agent": {
          "type": "boolean",
          "description": "When set to true, bot identification takes place using user-agent of the request.",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "CacheKeyConfiguration": {
      "type": "object",
      "description": "The request attributes used to construct the cache key for requests matching this rule. Note that the request path is always included in the cache key construction.",
      "properties": {
        "browser": {
          "type": "boolean",
          "description": "When set to true, browser attributes used for content optimization are used in the cache key construction, ignored otherwise.",
          "default": false
        },
        "cookie": {
          "type": "string",
          "description": "The value of the specified cookie will be used to construct the cache key. If the value is null, it will be ignored.",
          "default": "null",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "hostname": {
          "type": "boolean",
          "description": "When set to true, the host name is used in the cache key construction, ignored otherwise.",
          "default": false
        },
        "query": {
          "type": "boolean",
          "description": "When set to true, query parameters are used in the cache key construction, ignored otherwise.",
          "default": false
        }
      }
    },
    "CacheTagConfiguration": {
      "type": "object",
      "description": "The configuration to populate cache tags.",
      "required": [
        "name",
        "from"
      ],
      "properties": {
        "from": {
          "type": "string",
          "description": "The tags are used from the request header by default.",
          "enum": [
            "header"
          ]
        },
        "name": {
          "description": "Header names to be included in the cache tag.",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$",
          "minLength": 1
        }
      }
    },
    "CdnCacheKey": {
      "type": "object",
      "required": [
        "headers",
        "cookies",
        "queries"
      ],
      "properties": {
        "headers": {
          "description": "Determines whether any HTTP headers in the viewer requests (and if so, which headers) needs to be included in the cache key.",
          "type": "string",
          "enum": [
            "none",
            "include-specified"
          ]
        },
        "header_names": {
          "description": "Array of header names to be included in the cache key.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$"
          },
          "uniqueItems": true
        },
        "cookies": {
          "description": "Determines whether any cookies in the viewer requests (and if so, which cookies) needs to be included in the cache key.",
          "type": "string",
          "enum": [
            "none",
            "all",
            "include-specified",
            "exclude-specified"
          ]
        },
        "cookie_names": {
          "description": "Array of cookie names to be included or excluded in cache key.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
          },
          "uniqueItems": true
        },
        "queries": {
          "description": "Determines whether any URL query strings in the viewer requests (and if so, which query strings) needs to be included in the cache key",
          "type": "string",
          "enum": [
            "none",
            "all",
            "include-specified",
            "exclude-specified"
          ]
        },
        "query_names": {
          "description": "Array of query names to be included or excluded in cache key.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9._\\-~!$&'()*+,;=:@/%]*$"
          },
          "uniqueItems": true
        }
      }
    },
    "CdnConfiguration": {
      "type": "object",
      "required": [
        "controls"
      ],
      "properties": {
        "controls": {
          "type": "array",
          "description": "Array of cdn controls to be configured with the cdn distribution.",
          "items": {
            "$ref": "#/definitions/CdnControl"
          }
        }
      }
    },
    "CdnControl": {
      "type": "object",
      "required": [
        "path_pattern",
        "cache_key"
      ],
      "properties": {
        "path_pattern": {
          "$ref": "#/definitions/CdnControlPath"
        },
        "default_ttl": {
          "type": "integer",
          "minimum": 0,
          "maximum": 31536000,
          "default": 0
        },
        "cache_key": {
          "description": "A configuration that determines whether headers, cookies, and query parameters of the viewer requests needs to included in the cache key or not.",
          "$ref": "#/definitions/CdnCacheKey"
        },
        "origin_request": {
          "description": "A configuration that determines whether headers, cookies and query parameters of the viewer request needs to be sent to the origin or not.",
          "$ref": "#/definitions/CdnOriginRequest"
        },
        "origin_request_handlers": {
          "type": "array",
          "description": "The handler to run for matching requests made when Webscale CDN contacts origin.",
          "items": {
            "$ref": "#/definitions/HandlerHref"
          },
          "maxItems": 1
        },
        "origin_response_handlers": {
          "type": "array",
          "description": "The handler to run for matching requests made when origin responds to Webscale CDN.",
          "items": {
            "$ref": "#/definitions/HandlerHref"
          },
          "maxItems": 1
        }
      }
    },
    "CdnControlAssociation": {
      "type": "object",
      "description": "The application and CDN control paths with which the handler is associated.",
      "additionalProperties": false,
      "properties": {
        "application": {
          "$ref": "#/definitions/ApplicationHref"
        },
        "cdn_controls": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CdnControlPath"
          }
        }
      }
    },
    "CdnControlPath": {
      "type": "string",
      "description": "The path pattern that specifies to which requests a CDN control should apply.",
      "pattern": "^[a-zA-Z0-9._\\-.*$/~\"'@:+]*$",
      "maxLength": 255,
      "minLength": 1
    },
    "CdnOriginRequest": {
      "type": "object",
      "required": [
        "headers",
        "cookies",
        "queries"
      ],
      "properties": {
        "headers": {
          "description": "Determines whether any HTTP headers in viewer requests (and if so, which headers) needs to be sent to the origin.",
          "type": "string",
          "enum": [
            "none",
            "all",
            "include-specified"
          ]
        },
        "header_names": {
          "description": "Array of header names to be included or excluded in origin request.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$"
          },
          "uniqueItems": true
        },
        "cookies": {
          "description": "Determines whether any cookies in viewer requests (and if so, which cookies) needs to be sent to the origin.",
          "type": "string",
          "enum": [
            "none",
            "all",
            "include-specified"
          ]
        },
        "cookie_names": {
          "description": "Array of cookie names to be included or excluded in origin request.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
          },
          "uniqueItems": true
        },
        "queries": {
          "description": "Determines whether any URL query strings in viewer requests (and if so, which query strings) needs to be sent to the origin.",
          "type": "string",
          "enum": [
            "none",
            "all",
            "include-specified"
          ]
        },
        "query_names": {
          "description": "Array of query names to be included or excluded in origin request.",
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9._\\-~!$&'()*+,;=:@/%]*$"
          },
          "uniqueItems": true
        }
      }
    },
    "Challenge": {
      "type": "object",
      "required": [
        "alias",
        "verified"
      ],
      "description": "A challenge verifying ownership of an application alias.  An application cannot be started until all it's challenges have been verified.  The Tasks api is used to validate an application and verify outstanding challenges.",
      "properties": {
        "alias": {
          "description": "The application alias that this challenge applies to.",
          "type": "string",
          "format": "uri"
        },
        "verified": {
          "description": "Boolean indicating whether the challenge has been verified or not.",
          "type": "boolean"
        },
        "url": {
          "description": "Ownership of the alias is demonstrated by making specified challenge content available here.",
          "type": "string",
          "format": "uri"
        },
        "content": {
          "description": "This content (and no other content) must be available at the challenge url for the challenge to pass verification.",
          "type": "string"
        }
      }
    },
    "Check": {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "description": "URL to perform server verification on.",
          "type": "string",
          "format": "uri"
        },
        "allowed_status_code": {
          "description": "Regular expression to check the status code for responses to verification requests, when it is not satisfied the check will be deemed as a failure. Defaults to '/^[23]/'",
          "type": "string",
          "format": "regex",
          "default": "/^[23]/"
        },
        "body": {
          "description": "Request body which needs to be sent with verification request. Defaults to empty string.",
          "type": "string"
        },
        "headers": {
          "description": "Array of headers that needs to be included in the verification request. Defaults to no headers.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Header"
          }
        },
        "permitted_redirect_hosts": {
          "description": "A list of host names to follow when redirect responses are received during verification. Defaults to empty list.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Alias"
          },
          "default": [

          ]
        },
        "prohibit_content": {
          "description": "A regular expression applied on the response body that if matched fails the check. Defaults to no regular expression.",
          "type": "string",
          "format": "regex"
        },
        "request_method": {
          "description": "HTTP request method to use when sending verification requests. Defaults to 'GET'",
          "type": "string",
          "pattern": "^(GET|HEAD|POST|PUT|PATCH|DELETE)$",
          "default": "GET"
        },
        "require_content": {
          "description": "A regular expression applied on the response body that must match for the check to succeed. Defaults to no regular expression.",
          "type": "string",
          "format": "regex"
        },
        "timeout": {
          "description": "Number of seconds to wait for the response from server. Defaults to 30 seconds.",
          "type": "integer",
          "default": 30
        },
        "verify_certificates": {
          "description": "Flag when set to true directs the check to verify the validity of the offered certificates. Defaults to true.",
          "type": "boolean",
          "default": true
        }
      }
    },
    "Cidr": {
      "type": "string",
      "description": "A ip address or range.",
      "pattern": "^((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(/([0-9]|[1-2][0-9]|3[0-2]))?|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|([0-9a-fA-F]{1,4}:)(:[0-9a-fA-F]{1,4}){1,6}|:(:[0-9a-fA-F]{1,4}){1,7}|::)(/([0-9]|[1-9][0-9]|1[01][0-9]|12[0-8]))?)$"
    },
    "Cluster": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ClusterState"
        },
        {
          "$ref": "#/definitions/ClusterConfiguration"
        }
      ]
    },
    "ClusterConfiguration": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/Name",
          "description": "The name of the cluster."
        },
        "minimum_size": {
          "$ref": "#/definitions/NonNegativeInteger",
          "description": "The minimum size that the cluster will auto scale in to."
        },
        "maximum_size": {
          "$ref": "#/definitions/NonNegativeInteger",
          "description": "The maximum size that the cluster will auto scale out to."
        },
        "manual_size": {
          "oneOf": [
            {
              "type": "null",
              "description": "No manual size. Allow auto-scaling."
            },
            {
              "$ref": "#/definitions/NonNegativeInteger"
            }
          ],
          "description": "The explicit size that a cluster will scale to. Overrides automatic size."
        },
        "instance_type": {
          "$ref": "#/definitions/InstanceFlavor",
          "description": "Specifies the type (size) of instances to be created."
        },
        "scale_in_conditions": {
          "type": "array",
          "description": "When any of these conditions become true for a server, then the cluster automatic size will be reduced by one.",
          "items": {
            "$ref": "#/definitions/ScalingCondition"
          },
          "default": [

          ]
        },
        "scale_out_conditions": {
          "type": "array",
          "description": "When any of these conditions become true for a server, then the cluster automatic size will be increased by one.",
          "items": {
            "$ref": "#/definitions/ScalingCondition"
          },
          "default": [

          ]
        },
        "server_blueprints": {
          "type": "array",
          "description": "Specifies how servers in this cluster are to be built.",
          "items": {
            "$ref": "#/definitions/Blueprint"
          }
        },
        "bootstrap": {
          "$ref": "#/definitions/BootstrapConfiguration",
          "description": "Bootstrap setup file and command to run upon commissioning a new server."
        },
        "minimum_increment": {
          "$ref": "#/definitions/PositiveInteger",
          "description": "When an automatic scale out operation occurs, specifies the minimum number of servers that will be created to satisfy the scale out. This is useful for applications whose servers are prone to failure in the presence of moderate increases in load by quickly scaling out additional servers.",
          "default": 1
        },
        "server_failure_timeout": {
          "$ref": "#/definitions/Duration",
          "description": "Amount of time (in seconds) after which an unreachable server will be considered failed. A server is unreachable while attempts to connect to it are unsuccessful. Once a server is failed, a replacement server is created, and after verification, the failed server is destroyed. Defaults to a period of 90 seconds.",
          "default": 90
        },
        "servers_update_webhook": {
          "description": "If configured, this URL will be posted with contents equivalent to getting the cluster whenever its servers have been updated.",
          "$ref": "#/definitions/HttpUrl",
          "default": ""
        },
        "verify_timeout": {
          "type": "integer",
          "description": "The time to wait for a new server to verify. If a server does not respond to a GET / with a non-5xx status code after this many seconds, then it fails verification and will be replaced or destroyed",
          "default": 600,
          "minimum": 60
        },
        "failed_server_disposition": {
          "description": "If set to detach, failed servers won't be deleted from cloud provider after deletion.",
          "type": "string",
          "enum": [
            "destroy",
            "detach"
          ],
          "default": "destroy"
        },
        "allocate_public_address": {
          "description": "When set to true, server will have a public address associated with it. If set to false, the server will not have public address. Before making this change, please make sure that the proxy and servers with private addresses are in the same network. NOTE: As of now, this functionality is only supported for Centurylink cloud.",
          "type": "boolean",
          "default": true
        },
        "measurement_type": {
          "description": "When self-reporting, server will post its measurements to /v2/servers/metrics periodically. When lg-status, server needs to be installed with lg_mod_status and Webscale will pull the measurements from the server periodically. When none, Webscale will not monitor the cluster",
          "type": "string",
          "enum": [
            "none",
            "lg-status",
            "self-reporting"
          ],
          "default": "lg-status"
        },
        "checks": {
          "type": "array",
          "description": "List of checks that needs to be performed to verify cluster server.",
          "items": {
            "$ref": "#/definitions/Check"
          },
          "maxItems": 50
        },
        "metadata": {
          "type": "array",
          "description": "A set of key/value pairs that will be provided to servers created in this cluster. Server blueprint metadata overrides the cluster metadata on a key-by-key basis.",
          "items": {
            "$ref": "#/definitions/MetadataEntry"
          }
        },
        "files": {
          "type": "array",
          "description": "A set of files to be made available on servers created with this blueprint. Server blueprint files overrides cluster files on a key-by-key basis.",
          "items": {
            "$ref": "#/definitions/MetadataFileEntry"
          }
        }
      }
    },
    "ClusterHref": {
      "type": [
        "null",
        "string"
      ],
      "pattern": "^\\/v2\\/clusters\\/[a-z0-9]+$",
      "description": "The endpoint for the cluster resource."
    },
    "ClusterPatch": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ClusterConfiguration"
        }
      ]
    },
    "ClusterPost": {
      "type": "object",
      "allOf": [
        {
          "required": [
            "name",
            "minimum_size",
            "maximum_size",
            "instance_type",
            "scale_in_conditions",
            "scale_out_conditions",
            "server_blueprints"
          ]
        },
        {
          "$ref": "#/definitions/ClusterConfiguration"
        }
      ]
    },
    "ClusterServer": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/Server"
        },
        {
          "required": [
            "href",
            "name",
            "state",
            "networks"
          ],
          "properties": {
            "active_since": {
              "$ref": "#/definitions/Timestamp",
              "description": "Time since the server started accepting connections"
            },
            "created": {
              "$ref": "#/definitions/Timestamp",
              "description": "Time when the virtual machine instance was created in the cloud but it was not set up to accept connections"
            },
            "href": {
              "type": "string",
              "description": "The endpoint for the server resource"
            },
            "is_failed": {
              "type": "boolean",
              "description": "This will be true for a server that has been unreachable for longer than the server failure timeout for its cluster. Once a server has failed, it is not recoverable and will be replaced or destroyed"
            },
            "name": {
              "type": "string",
              "description": "The name of the server",
              "minLength": 1
            },
            "networks": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ServerNetwork"
              }
            },
            "private_address": {
              "type": "string",
              "description": "The private address of the server"
            },
            "public_address": {
              "type": "string",
              "description": "The public address of the server"
            },
            "replacement_for": {
              "type": "string",
              "description": "A reference to a server being replaced by this one"
            },
            "server_blueprint": {
              "$ref": "#/definitions/Blueprint"
            },
            "state": {
              "type": "string",
              "description": "The current state of the server. The state 'creating' indicates that the virtual machine instance is getting created in the cloud but it is not ready to accept connections. The state 'verifying' indicates that the server was created successfully and it is being verified to check if the web service is responding on that server. The state 'joining' indicates that the server verification was successful and the system is being reconfigured so that the server will begin receiving traffic. The state 'active' indicates that the server is either serving the traffic or ready to accept connections. The state 'failed' indicates that the server has been unreachable for longer than the server failure timeout for its cluster and it is not recoverable and will be replaced or destroyed. The state 'leaving' indicates that the server is about to leave the cluster and the system is being reconfigured so that the server will stop receiving the traffic. The state 'destroying' indicates that the server has stopped receiving the traffic and the instance is getting deleted from the cloud",
              "enum": [
                "creating",
                "joining",
                "active",
                "verifying",
                "leaving",
                "failed",
                "destroying"
              ]
            },
            "unreachable_since": {
              "$ref": "#/definitions/Timestamp",
              "description": "Time since the server stopped accepting connections"
            }
          }
        }
      ]
    },
    "ClusterState": {
      "type": "object",
      "required": [
        "href",
        "automatic_size",
        "active",
        "servers"
      ],
      "properties": {
        "href": {
          "$ref": "#/definitions/ClusterHref",
          "description": "The endpoint for the cluster resource."
        },
        "automatic_size": {
          "type": "integer",
          "description": "The size that the cluster is currently auto scaled to."
        },
        "active": {
          "type": "boolean",
          "description": "Indicates if the cluster is active. Active clusters may auto scale and are monitored."
        },
        "servers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ClusterServer"
          }
        },
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "When the cluster was created."
        },
        "delete_pending": {
          "description": "Indicates that the cluster is about to be deleted.",
          "type": "boolean",
          "default": false
        }
      }
    },
    "Component": {
      "type": "object",
      "description": "",
      "properties": {
        "layer_name": {
          "type": "string",
          "description": "Name of the resource layer being referenced here.",
          "minLength": 1
        },
        "element": {
          "$ref": "#/definitions/ServicesHref"
        }
      }
    },
    "ConcurrentLimit": {
      "type": "integer",
      "description": "Maximum number of concurrently active requests that can be run in a load balancer before requests are put in the suspend queue. This attribute may only be set by system administrators",
      "minimum": 1,
      "maximum": 1024
    },
    "ConditionAddressIsNotThreat": {
      "type": "object",
      "description": "True if the requester's IP address is not a known malicious source.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_is_not_threat"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionAddressIsNotWhitelisted": {
      "type": "object",
      "description": "True if the requester's IP address is not on the application whitelist.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_is_not_whitelisted"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionAddressInSet": {
      "type": "object",
      "description": "Tests if requester's IP address is in the specified address set.",
      "required": [
        "type",
        "address_set"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_in_set"
          ]
        },
        "address_set": {
          "$ref": "#/definitions/AddressSetHref"
        }
      },
      "additionalProperties": false
    },
    "ConditionAddressIsThreat": {
      "type": "object",
      "description": "True if the requester's IP address is a known malicious source.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_is_threat"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionAddressIsWhitelisted": {
      "type": "object",
      "description": "True if the requester's IP address is on the application whitelist.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_is_whitelisted"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionAddressNotInSet": {
      "type": "object",
      "description": "Tests if requester's IP address is not in the specified address set",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "address_not_in_set"
          ]
        },
        "address_set": {
          "$ref": "#/definitions/AddressSetHref"
        }
      },
      "additionalProperties": false
    },
    "ConditionAuthCookieIsNotSet": {
      "type": "object",
      "description": "True when a specified authorization cookie is not set or is expired.",
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "type": {
          "type": "string",
          "enum": [
            "auth_cookie_is_not_set"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionAuthCookieIsSet": {
      "type": "object",
      "description": "True when a specified authorization cookie is set and not expired.",
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "type": {
          "type": "string",
          "enum": [
            "auth_cookie_is_set"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionCookieIsNotSet": {
      "type": "object",
      "description": "True if a named cookie is not set.",
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "type": {
          "type": "string",
          "enum": [
            "cookie_is_not_set"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionCookieIsSet": {
      "type": "object",
      "description": "True to see if a named cookie is set.",
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "type": {
          "type": "string",
          "enum": [
            "cookie_is_set"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionCookieValueDoesNotMatch": {
      "description": "Test to check if the named cookie value does not match the specified pattern. If the specified cookie does not exist, this condition will evaluate to true. Cookie value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with cookie value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        },
        "type": {
          "type": "string",
          "enum": [
            "cookie_value_does_not_match"
          ]
        }
      }
    },
    "ConditionCookieValueMatches": {
      "description": "Test to check if the named cookie value matches the specified pattern. Cookie value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with cookie value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        },
        "type": {
          "type": "string",
          "enum": [
            "cookie_value_matches"
          ]
        }
      }
    },
    "ConditionHeader": {
      "type": "object",
      "required": [
        "name",
        "pattern"
      ],
      "properties": {
        "name": {
          "description": "Name of the header to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with header value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        }
      }
    },
    "ConditionHeaderValueMatches": {
      "description": "Test to check if the header value matches the specified pattern. Header value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the header to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with header value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        },
        "type": {
          "type": "string",
          "enum": [
            "header_value_matches"
          ]
        }
      }
    },
    "ConditionHeaderValueDoesNotMatch": {
      "description": "Test to check if the header value does not match the specified pattern. If the specified header does not exist, this condition will evaluate to true. Header value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "name": {
          "description": "Name of the header to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with header value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        },
        "type": {
          "type": "string",
          "enum": [
            "header_value_does_not_match"
          ]
        }
      }
    },
    "ConditionHeadersNotMatch": {
      "type": "object",
      "description": "Test to check if the list of named header values does not match their respective specified patterns.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "description": "Array of headers match conditions",
          "$ref": "#/definitions/ConditionHeaders",
          "minItems": 1
        },
        "type": {
          "type": "string",
          "enum": [
            "headers_not_match",
            "response_headers_not_match"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionHeadersMatch": {
      "type": "object",
      "description": "Test to check if the list of named header values match their respective specified patterns.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "description": "Array of headers match conditions",
          "$ref": "#/definitions/ConditionHeaders"
        },
        "type": {
          "type": "string",
          "enum": [
            "headers_match",
            "response_headers_match"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionHeaders": {
      "type": "array",
      "description": "Array of headers conditions",
      "items": {
        "$ref": "#/definitions/ConditionHeader"
      },
      "minItems": 1
    },
    "ConditionIsCrawler": {
      "type": "object",
      "description": "True if the requester's IP address is a known Web Crawler.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "is_crawler"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionMethodIs": {
      "type": "object",
      "description": "True if the method name of a request is included in the specified list.",
      "required": [
        "values",
        "type"
      ],
      "properties": {
        "values": {
          "description": "A list of method names.",
          "$ref": "#/definitions/MethodNames"
        },
        "type": {
          "type": "string",
          "enum": [
            "method_is"
          ]
        }
      }
    },
    "ConditionMethodIsNot": {
      "type": "object",
      "description": "True if the method name of a request is not included in the specified list.",
      "required": [
        "values",
        "type"
      ],
      "properties": {
        "values": {
          "description": "A list of method names.",
          "$ref": "#/definitions/MethodNames"
        },
        "type": {
          "type": "string",
          "enum": [
            "method_is_not"
          ]
        }
      }
    },
    "ConditionCountryIs": {
      "type": "object",
      "description": "True if the country of origin of a request is included in the specified list.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "list": {
          "description": "A list of country codes",
          "$ref": "#/definitions/CountryCodes"
        },
        "type": {
          "type": "string",
          "enum": [
            "country_is"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionCountryIsNot": {
      "type": "object",
      "description": "True if the country of origin of a request is not in the specified list.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "list": {
          "description": "A list of country codes",
          "$ref": "#/definitions/CountryCodes"
        },
        "type": {
          "type": "string",
          "enum": [
            "country_is_not"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionRandom": {
      "type": "object",
      "description": "True if a value from a uniform random variable from 0.0 to 1.0 is less than or equal to the specified probability.",
      "required": [
        "probability",
        "type"
      ],
      "properties": {
        "probability": {
          "description": "Probability for which condition is true",
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "type": {
          "type": "string",
          "enum": [
            "random"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionRateLimit": {
      "description": "True when the number of request during a duration is greater than a specified threshold.",
      "type": "object",
      "required": [
        "duration",
        "display_unit",
        "threshold"
      ],
      "properties": {
        "duration": {
          "type": "integer",
          "description": "The amount of time, in number of seconds, over which to accumulate the request count",
          "minimum": 5
        },
        "display_unit": {
          "$ref": "#/definitions/DurationDisplayUnit"
        },
        "threshold": {
          "description": "Maximum number of requests in the given duration before the condition is triggered",
          "type": "integer",
          "minimum": 1
        },
        "type": {
          "type": "string",
          "enum": [
            "rate_limit"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionReferrerDoesNotMatch": {
      "type": "object",
      "description": "True for a request for which request referrer does not match any referrer pattern from a list",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "$ref": "#/definitions/ReferrerPatterns"
        },
        "type": {
          "type": "string",
          "enum": [
            "referrer_is_not"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionReferrerIsDefined": {
      "type": "object",
      "description": "True for a request for which request referrer hostname matches a hostname for this application",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "referrer_is_defined"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionReferrerIsNotDefined": {
      "type": "object",
      "description": "True for a request for which request referrer hostname does not match a hostname for this application.",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "referrer_is_not_defined"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionReferrerMatches": {
      "type": "object",
      "description": "True for a request for which request referrer matches a referrer pattern from a list",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "$ref": "#/definitions/ReferrerPatterns"
        },
        "type": {
          "type": "string",
          "enum": [
            "referrer_is"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionStatusCodeMatches": {
      "type": "object",
      "description": "True if the response code matches the pattern.",
      "required": [
        "pattern",
        "type"
      ],
      "properties": {
        "pattern": {
          "description": "A regular expression to match against the response status code.",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        },
        "type": {
          "type": "string",
          "enum": [
            "status_code_matches"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionUrl": {
      "type": "object",
      "description": "A wildcard url definition used for triggering page controls on requests.",
      "properties": {
        "scheme": {
          "type": "string",
          "description": "Http scheme used for matching against requests. If this field is not specified then both http and https will match.",
          "pattern": "^(http|https|\\*)$"
        },
        "domain": {
          "type": "string",
          "description": "Wildcard domain used for matching against requests. If this field is not specified then all configured application domains will match.",
          "maxLength": 255,
          "pattern": "^[0-9a-zA-Z\\-*.]+$"
        },
        "path": {
          "type": "string",
          "description": "Wildcard path used for matching against requests. If this field is not specified then all paths will match.",
          "maxLength": 760,
          "pattern": "^[a-zA-Z0-9._\\-~!$&'()*+,;=:@/%]*$"
        },
        "query": {
          "type": "string",
          "description": "Wildcard query used for matching against requests. If this field is not specified then all query values will match.",
          "maxLength": 760,
          "pattern": "^[a-zA-Z0-9._\\-~!$&'()*+,;=:@/%]*$"
        }
      },
      "additionalProperties": false
    },
    "ConditionUrlDoesNotMatch": {
      "type": "object",
      "description": "True for a request URL that does not match any URL pattern from a list.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "description": "Array of url objects",
          "$ref": "#/definitions/ConditionUrls"
        },
        "type": {
          "type": "string",
          "enum": [
            "url_is_not"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionUrlMatches": {
      "type": "object",
      "description": "True for a request URL that matches a URL pattern from a list.",
      "required": [
        "list",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "list": {
          "description": "Array of url objects",
          "$ref": "#/definitions/ConditionUrls"
        },
        "type": {
          "type": "string",
          "enum": [
            "urls"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionUrls": {
      "type": "array",
      "description": "Array of url objects",
      "items": {
        "$ref": "#/definitions/ConditionUrl"
      },
      "minItems": 1
    },
    "ConditionUserAgentDoesNotMatch": {
      "type": "object",
      "description": "True for a request user-agent that does not match a specified regular expression",
      "required": [
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "pattern": {
          "description": "A regular expression",
          "type": "string",
          "minLength": 1
        },
        "type": {
          "type": "string",
          "enum": [
            "user_agent_does_not_match"
          ]
        }
      },
      "additionalProperties": false
    },
    "ConditionUserAgentMatches": {
      "type": "object",
      "description": "True for a request user-agent that matches a specified regular expression",
      "required": [
        "pattern",
        "type"
      ],
      "properties": {
        "case_sensitive": {
          "description": "Flag for determining if the condition is case sensitive",
          "type": "boolean"
        },
        "pattern": {
          "description": "A regular expression",
          "type": "string",
          "minLength": 1
        },
        "type": {
          "type": "string",
          "enum": [
            "user_agent_matches"
          ]
        }
      },
      "additionalProperties": false
    },
    "InvalidateCacheUrl": {
      "description": "Pattern for the URL to be invalidated.",
      "type": "string",
      "pattern": "^(http|https|\\*):/{2}((([\\w-]{1,63}\\.){1,}[\\w-]{2,63})|([\\w\\-.]{0,63}\\*[\\w\\-.]{0,63}))+/(([\\w.\\-~!$&'()*+,;=:@?/]|%[A-Fa-f0-9]{2})*)+$"
    },
    "TagName": {
      "description": "Name of different tags.",
      "type": "string",
      "pattern": "^[!\"#$%&'()*+,\\-./0-9:;<=>?@A-Z\\[\\\\\\]^_`a-z{|}~ ]{0,8190}$"
    },
    "CountryCode": {
      "description": "Two letter country code defined as per the ISO 3166-1 standard.",
      "type": "string",
      "pattern": "^[a-zA-Z]{2}$"
    },
    "CountryCodes": {
      "description": "A list of country codes",
      "type": "array",
      "items": {
        "$ref": "#/definitions/CountryCode"
      },
      "minItems": 1
    },
    "CustomLogId": {
      "type": "string",
      "description": "Unique custom log ID based on api id and created timestamp."
    },
    "MethodName": {
      "description": "Name of different HTTP methods.",
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "pattern": "^[A-Z\\-]{3,20}$"
    },
    "MethodNames": {
      "description": "A list of method names.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/MethodName"
      },
      "minItems": 1
    },
    "Currency": {
      "type": "number",
      "minimum": 0,
      "description": "US currency.",
      "multipleOf": 0.01
    },
    "DataPlane": {
      "description": "A data plane acts as the proxy between application servers and its users.",
      "allOf": [
        {
          "$ref": "#/definitions/DataPlaneConfiguration"
        },
        {
          "$ref": "#/definitions/DataPlaneIdentity"
        },
        {
          "$ref": "#/definitions/DataPlaneState"
        }
      ]
    },
    "DataPlaneConfiguration": {
      "description": "The configurable attributes of a data plane",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name describing the data plane",
          "minLength": 1,
          "maxLength": 100
        },
        "account": {
          "description": "A reference to the account to which the data plane belongs to.",
          "$ref": "#/definitions/AccountHref"
        },
        "minimum_size": {
          "type": "integer",
          "description": "Minimum number of proxies in this data plane",
          "minimum": 0,
          "default": 0
        },
        "maximum_size": {
          "type": "integer",
          "description": "Maximum number of proxies in this data plane"
        },
        "maximum_assignments_per_proxy": {
          "type": "integer",
          "description": "Maximum number of application assignments per proxy",
          "minimum": 1
        },
        "blueprints": {
          "type": "array",
          "description": "Array of blueprints",
          "items": {
            "$ref": "#/definitions/Blueprint"
          }
        }
      }
    },
    "DataPlaneIdentity": {
      "description": "Identifier for a data plane.",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this data plane",
          "pattern": "^/v2/data-planes/[a-z0-9]+$"
        }
      }
    },
    "DataPlaneState": {
      "type": "object",
      "description": "State for a data plane",
      "properties": {
        "assigned_applications": {
          "type": "array",
          "description": "Array of applications assigned to this data plane",
          "items": {
            "type": "string"
          }
        },
        "proxies": {
          "type": "array",
          "description": "Array of the assigned proxies to this data plane",
          "items": {
            "$ref": "#/definitions/Proxy"
          }
        }
      }
    },
    "DataTransferBillingMonitorParameters": {
      "type": "object",
      "description": "The configuration of a data transfer billing monitor",
      "additionalProperties": false,
      "properties": {
        "budget": {
          "description": "The number of data transfer allowance in GB this account is entitled.",
          "type": "number",
          "format": "float"
        },
        "thresholds": {
          "type": "array",
          "description": "An array of thresholds.",
          "items": {
            "$ref": "#/definitions/DataTransferBillingThreshold"
          }
        }
      }
    },
    "DataTransferBillingThreshold": {
      "type": "object",
      "required": [
        "type",
        "percent"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of threshold.",
          "enum": [
            "budget",
            "allowance"
          ]
        },
        "percent": {
          "type": "number",
          "format": "float",
          "description": "The percent of data transfer when this threshold will trigger."
        }
      }
    },
    "Date": {
      "type": "string",
      "description": "An iso8601 formatted date.",
      "pattern": "^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)$"
    },
    "DomainName": {
      "type": "string",
      "description": "A domain name as specified by RFC1035, RFC1123, and RFC2181 with the exception that no space character or double quote (\") can be part of the name",
      "pattern": "^([^.\"\\s]+){1,63}(?:\\.[^.\"\\s]{1,63})+$",
      "minLength": 1,
      "maxLength": 253
    },
    "Duration": {
      "$ref": "#/definitions/NonNegativeInteger",
      "description": "Duration in seconds, no fractional values."
    },
    "DurationDisplayUnit": {
      "type": "string",
      "description": "Unit to use for displaying the time duration specified.",
      "enum": [
        "seconds",
        "minutes",
        "hours"
      ]
    },
    "Email": {
      "type": "string",
      "description": "An email address",
      "pattern": "^.+@.+\\..+$",
      "minLength": 1,
      "maxLength": 255
    },
    "EmptyObject": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
      }
    },
    "Entitlement": {
      "description": "A generic entitlement",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/EntitlementConfiguration"
        },
        {
          "$ref": "#/definitions/EntitlementIdentity"
        },
        {
          "$ref": "#/definitions/EntitlementState"
        }
      ]
    },
    "EntitlementConfiguration": {
      "description": "The configurable parts of an entitlement",
      "additionalProperties": false,
      "properties": {
        "plan_id": {
          "type": "string",
          "description": "Api ID of the associated plan"
        },
        "started": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/Timestamp"
            }
          ]
        }
      }
    },
    "EntitlementPost": {
      "type": "object",
      "required": [
        "plan_id"
      ],
      "$ref": "#/definitions/EntitlementConfiguration"
    },
    "EntitlementPatch": {
      "type": "object",
      "required": [
        "started"
      ],
      "$ref": "#/definitions/EntitlementConfiguration"
    },
    "EntitlementIdentity": {
      "description": "Identifier for a entitlement",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this entitlement",
          "pattern": "^/v2/accounts/[a-z0-9]+/entitlements/[a-z0-9]+$"
        }
      }
    },
    "EntitlementState": {
      "description": "The current state of an entitlement",
      "additionalProperties": false,
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "EnumValue": {
      "description": "An enumerated value.",
      "type": "object",
      "required": [
        "value",
        "display"
      ],
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "Value of an enum element.",
          "type": "string"
        },
        "display": {
          "description": "How an enum element should be displayed.",
          "type": "string"
        }
      }
    },
    "Error": {
      "type": "object",
      "required": [
        "type",
        "description"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Specific error type."
        },
        "description": {
          "type": "string",
          "description": "Description of what occurred."
        }
      }
    },
    "Event": {
      "type": "object",
      "required": [
        "created",
        "incident",
        "message",
        "severity",
        "type"
      ],
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "details": {
          "description": "Additional structured information about the event. The specific structure depends on the type of the event. For custom user events this can be any JSON object.",
          "oneOf": [
            {
              "$ref": "#/definitions/EventActionDetails"
            },
            {
              "$ref": "#/definitions/EventActionDetails"
            },
            {
              "$ref": "#/definitions/EventCreateDetails"
            },
            {
              "$ref": "#/definitions/EventDeleteDetails"
            },
            {
              "$ref": "#/definitions/EventUpdateDetails"
            },
            {
              "$ref": "#/definitions/AnyObject"
            }
          ]
        },
        "incident": {
          "$ref": "#/definitions/IncidentHref"
        },
        "message": {
          "$ref": "#/definitions/EventMessage"
        },
        "severity": {
          "$ref": "#/definitions/EventSeverity"
        },
        "subject": {
          "$ref": "#/definitions/EventSubjectHref"
        },
        "type": {
          "$ref": "#/definitions/EventTypeHref"
        },
        "origin": {
          "type": "string",
          "maxLength": 200,
          "description": "The third-party entity that generated the event."
        },
        "originated": {
          "$ref": "#/definitions/Timestamp",
          "description": "The ISO 8601-formatted date when the third-party generated the event."
        }
      }
    },
    "EventActionDetails": {
      "type": "object",
      "description": "Event log details of type action",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the action that was executed on the system"
        },
        "snapshot": {
          "$ref": "#/definitions/EventConfigurationModel"
        }
      }
    },
    "EventConfigurationModel": {
      "type": "object",
      "oneOf": [
        {
          "$ref": "#/definitions/ApplicationConfiguration"
        },
        {
          "$ref": "#/definitions/ClusterConfiguration"
        },
        {
          "$ref": "#/definitions/GenericConfigurationModel"
        }
      ]
    },
    "EventCreateDetails": {
      "type": "object",
      "description": "Event log details of type create",
      "required": [
        "snapshot"
      ],
      "properties": {
        "snapshot": {
          "$ref": "#/definitions/EventConfigurationModel"
        }
      }
    },
    "EventDeleteDetails": {
      "type": "object",
      "description": "Event log details of type delete",
      "required": [
        "snapshot"
      ],
      "properties": {
        "snapshot": {
          "$ref": "#/definitions/EventConfigurationModel"
        }
      }
    },
    "EventMessage": {
      "type": "string",
      "description": "Text that describes the occurrence of an event.",
      "minLength": 1
    },
    "EventPost": {
      "type": "object",
      "required": [
        "subject",
        "message",
        "severity",
        "type"
      ],
      "properties": {
        "subject": {
          "$ref": "#/definitions/EventSubjectHref"
        },
        "message": {
          "$ref": "#/definitions/EventMessage"
        },
        "severity": {
          "$ref": "#/definitions/EventSeverity"
        },
        "type": {
          "type": "string",
          "description": "The type of event. For external events, the type may not begin with 'system-'.",
          "pattern": "^(?!system-).+"
        },
        "details": {
          "type": [
            "object",
            "null"
          ],
          "description": "Optional additional structured information about this event."
        },
        "origin": {
          "type": "string",
          "maxLength": 200,
          "description": "The third-party entity that generated the event."
        },
        "originated": {
          "$ref": "#/definitions/Timestamp",
          "description": "The ISO 8601-formatted date when the third-party generated the event."
        }
      }
    },
    "Events": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Event"
      }
    },
    "EventSeverity": {
      "type": "string",
      "description": "The severity of the event. There are three levels: info is informational and no action is needed, warning may indicate that an error will occur if action is not taken, severe is critical and requires immediate attention (e.g. the application is down).",
      "enum": [
        "info",
        "severe",
        "warning"
      ]
    },
    "EventSubjectHref": {
      "type": "string",
      "description": "The object that is affected by the event (e.g. A cluster scale out event for cluster w234fs will have a subject of /v2/cluster/w234fs).",
      "pattern": "^/v2/(applications|clusters|adcs)/[A-Za-z0-9]+$"
    },
    "EventTypeHref": {
      "type": "string",
      "description": "The type of event that has occurred."
    },
    "EventUpdateDetails": {
      "type": "object",
      "description": "Event log details of type update",
      "required": [
        "snapshot",
        "change"
      ],
      "properties": {
        "snapshot": {
          "$ref": "#/definitions/EventConfigurationModel"
        },
        "change": {
          "$ref": "#/definitions/JsonPatch"
        }
      }
    },
    "Field": {
      "description": "A log field.",
      "type": "object",
      "required": [
        "name",
        "display",
        "type",
        "description",
        "is_metric"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "The name of the field.",
          "type": "string"
        },
        "type": {
          "$ref": "#/definitions/Type"
        },
        "display": {
          "description": "Display name for the defined field type.",
          "type": "string"
        },
        "description": {
          "description": "A description of the field.",
          "type": "string"
        },
        "is_metric": {
          "description": "Indicates whether the field can be used in a groupselect.",
          "type": "boolean"
        },
        "aliases": {
          "description": "A collection of alternate names for the field.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "File": {
      "type": "object",
      "description": "A file object",
      "properties": {
        "href": {
          "$ref": "#/definitions/FileHref"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "bootstrap",
            "geo-db",
            "handler",
            "microsite",
            "waf-rules"
          ]
        },
        "details": {
          "$ref": "#/definitions/FileArchiveDetails"
        },
        "created_by": {
          "type": "string",
          "description": "Reference to the user that created this file."
        },
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Creation time associated with this file."
        },
        "updated": {
          "$ref": "#/definitions/Timestamp",
          "description": "Timestamp reflecting when the file was last updated."
        },
        "current_version": {
          "type": "integer",
          "description": "Currently used version of the file."
        },
        "versions": {
          "type": "array",
          "description": "All versions of the file.",
          "items": {
            "$ref": "#/definitions/FileVersion"
          }
        }
      }
    },
    "FileArchiveDetails": {
      "type": "object",
      "description": "Details for an archive file.",
      "properties": {
        "directory": {
          "type": "array",
          "description": "Files contained in the archive",
          "items": {
            "$ref": "#/definitions/FileArchiveDirectory"
          }
        }
      }
    },
    "FileArchiveDirectory": {
      "type": "object",
      "description": "Metadata for an archive file.",
      "properties": {
        "path": {
          "type": "string",
          "description": "Path of the file relative to its root."
        },
        "size": {
          "type": "number",
          "description": "The size of the file in bytes."
        },
        "updated": {
          "$ref": "#/definitions/Timestamp",
          "description": "Timestamp reflecting when the file was last updated."
        }
      }
    },
    "FileConfiguration": {
      "type": "object",
      "description": "The configurable attributes of a file.",
      "properties": {
        "content": {
          "type": "string",
          "description": "The content of the file."
        },
        "file_name": {
          "type": "string",
          "maxLength": 250,
          "description": "The file name of the file."
        },
        "name": {
          "type": "string",
          "maxLength": 250,
          "description": "The name of the file."
        },
        "description": {
          "type": "string",
          "maxLength": 250,
          "description": "A description of the file."
        },
        "label": {
          "type": "string",
          "maxLength": 50,
          "description": "Description for this version of the file."
        },
        "current_version": {
          "type": "integer",
          "description": "Raw version number for the file."
        }
      }
    },
    "FileHref": {
      "type": "string",
      "pattern": "^\\/v2\\/files\\/[a-z0-9]+$",
      "description": "Endpoint resource reference to a file."
    },
    "FileVersionHref": {
      "type": "string",
      "pattern": "^\\/v2\\/files\\/[a-z0-9]+\\/versions\\/[0-9]+$",
      "description": "Endpoint reference to a particular version of a file."
    },
    "FileInitializer": {
      "type": "object",
      "description": "File attributes that cannot be changed after creation.",
      "properties": {
        "type": {
          "type": "string",
          "description": "A type that specifies the purpose of a file.",
          "enum": [
            "bootstrap",
            "geo-db",
            "handler",
            "microsite",
            "waf-rules"
          ]
        }
      }
    },
    "FilePatch": {
      "type": "object",
      "description": "Used to patch a file.",
      "properties": {
        "content": {
          "type": "string",
          "description": "The content of the file"
        },
        "current_version": {
          "type": "string",
          "description": "Set to the version number that will be used or 'latest' to use the most recent version."
        },
        "description": {
          "type": "string",
          "maxLength": 250,
          "description": "A description of the file."
        },
        "file_name": {
          "type": "string",
          "maxLength": 250,
          "description": "The file name of the file."
        },
        "label": {
          "type": "string",
          "maxLength": 50,
          "description": "Description for this version of the file."
        },
        "name": {
          "type": "string",
          "maxLength": 250,
          "description": "The name of the file."
        }
      }
    },
    "FilePost": {
      "type": "object",
      "description": "Used to create a new file",
      "required": [
        "content",
        "file_name",
        "name"
      ],
      "allOf": [
        {
          "$ref": "#/definitions/FileInitializer"
        },
        {
          "$ref": "#/definitions/FileConfiguration"
        }
      ]
    },
    "FileVersion": {
      "type": "object",
      "description": "A file version object",
      "properties": {
        "file_name": {
          "type": "string",
          "description": "The file name of the file."
        },
        "version": {
          "type": "integer",
          "description": "Raw version number for the file."
        },
        "details": {
          "$ref": "#/definitions/FileArchiveDetails"
        },
        "content_type": {
          "type": "string",
          "description": "Type of the content for this version of the file."
        },
        "label": {
          "type": "string",
          "description": "Description for this version of the file."
        },
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Creation time associated with this file."
        }
      }
    },
    "FirewallHref": {
      "type": "string",
      "pattern": "^\\/v2\\/providers\\/[a-z0-9]+(\\/regions\\/[a-zA-Z0-9-_.]+)?\\/firewalls/[a-z0-9-_]+$",
      "description": "Endpoint resource reference to the firewall rule."
    },
    "GenericConfigurationModel": {
      "type": "object",
      "description": "A generic configuration model object that is to be used when an object specific configuration model schema is not found."
    },
    "Group": {
      "description": "A collection of roles granted to users of an account",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/GroupConfiguration"
        },
        {
          "$ref": "#/definitions/GroupIdentity"
        },
        {
          "$ref": "#/definitions/GroupedRoleState"
        }
      ]
    },
    "GroupConfiguration": {
      "description": "The configurable parts of a group",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the group",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Description of the group",
          "minLength": 0,
          "maxLength": 100
        },
        "roles": {
          "type": "array",
          "description": "Roles grant permissions to users",
          "items": {
            "type": "string",
            "pattern": "^/v2/accounts/[a-z0-9]+/roles/[a-z0-9]+$"
          },
          "uniqueItems": true
        }
      }
    },
    "GroupConfigurationPost": {
      "type": "object",
      "required": [
        "name"
      ],
      "$ref": "#/definitions/GroupConfiguration"
    },
    "GroupIdentity": {
      "description": "Identifier for a group",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this group",
          "pattern": "^/v2/(accounts|users)/[a-z0-9]+/groups/[a-z0-9]+$"
        }
      }
    },
    "GroupInvitation": {
      "description": "An invitation to a group.",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/GroupInvitationConfiguration"
        },
        {
          "$ref": "#/definitions/GroupInvitationIdentity"
        },
        {
          "$ref": "#/definitions/GroupInvitationState"
        },
        {
          "$ref": "#/definitions/GroupInvitationInitializer"
        }
      ]
    },
    "GroupInvitationConfiguration": {
      "description": "The configurable parts of a group invitation",
      "additionalProperties": false,
      "properties": {
        "state": {
          "type": "string",
          "description": "The current state of the group invitation.",
          "enum": [
            "queued",
            "accepted",
            "sent",
            "declined"
          ]
        }
      }
    },
    "GroupInvitationIdentity": {
      "description": "The identifier for a group invitation.",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this group",
          "pattern": "^/v2/accounts/[a-z0-9]+/group-invitations/[a-z0-9]+$"
        }
      }
    },
    "GroupInvitationInitializer": {
      "description": "A group invitation invites a user to a particular group.",
      "additionalProperties": false,
      "properties": {
        "user_email": {
          "description": "Email of the user",
          "$ref": "#/definitions/Email"
        },
        "group": {
          "type": "string",
          "description": "A reference to this group",
          "pattern": "^/v2/accounts/[a-z0-9]+/groups/[a-z0-9]+$"
        }
      }
    },
    "GroupInvitationPost": {
      "type": "object",
      "required": [
        "user_email",
        "group"
      ],
      "$ref": "#/definitions/GroupInvitationInitializer"
    },
    "GroupInvitationState": {
      "description": "The current state of a group invitation",
      "additionalProperties": false,
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "sent": {
          "$ref": "#/definitions/Timestamp"
        },
        "granted_by": {
          "type": "string",
          "description": "The user that sent the invitation",
          "pattern": "^/v2/users/[a-z0-9]+$"
        }
      }
    },
    "GroupedRoleState": {
      "description": "The current state of a group",
      "additionalProperties": false,
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "GroupState": {
      "type": "object",
      "description": "The states of the distinct groups over which a monitor monitors. A monitor is triggering if any state is triggered.",
      "properties": {
        "monitor_id": {
          "type": "string",
          "description": "The ID of the monitor.",
          "minLength": 12,
          "maxLength": 12
        },
        "subject": {
          "type": "string",
          "description": "The subject of the monitor.",
          "maxLength": 200
        },
        "scope": {
          "type": "object",
          "description": "The unique scope of defines this monitoring state."
        },
        "state": {
          "type": "boolean",
          "description": "Whether or not this state is triggered."
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "Handler": {
      "type": "object",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/HandlerInitializer"
        },
        {
          "$ref": "#/definitions/HandlerIdentity"
        },
        {
          "$ref": "#/definitions/HandlerConfiguration"
        },
        {
          "$ref": "#/definitions/HandlerState"
        }
      ]
    },
    "HandlerConfiguration": {
      "type": "object",
      "description": "The configurable properties of a handler.",
      "properties": {
        "description": {
          "type": "string",
          "description": "Describes the functionality provided by the handler.",
          "minLength": 0,
          "maxLength": 100
        },
        "file": {
          "$ref": "#/definitions/FileVersionHref"
        },
        "function": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "name",
            "type"
          ],
          "properties": {
            "name": {
              "type": "string",
              "description": "The handler function's name.",
              "minLength": 0,
              "maxLength": 50
            },
            "type": {
              "type": "string",
              "description": "The handler function's type. One of 'handle-request', 'handle-response' or 'compute'",
              "enum": [
                "handle-request",
                "handle-response",
                "compute"
              ]
            },
            "runtime": {
              "type": "string",
              "enum": [
                "nodejs14",
                "nodejs16"
              ],
              "description": "The version of the runtime in which the handler function runs."
            }
          }
        },
        "memory": {
          "type": "integer",
          "description": "The amount of memory, in MB, allocated to the handler during execution."
        },
        "service": {
          "type": "string",
          "pattern": "^\\/v2\\/services\\/[a-zA-Z0-9]+$",
          "description": "The service into which the handler will publish resources."
        }
      }
    },
    "HandlerHref": {
      "type": "string",
      "description": "A reference to the handler.",
      "pattern": "^\\/v2\\/handlers\\/[a-z0-9]+$"
    },
    "HandlerIdentity": {
      "type": "object",
      "description": "The properties used to uniquely identify a handler.",
      "additionalProperties": false,
      "properties": {
        "href": {
          "$ref": "#/definitions/HandlerHref"
        }
      }
    },
    "HandlerInitializer": {
      "type": "object",
      "description": "Handler properties that are set once at creation.",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the handler.",
          "minLength": 0,
          "maxLength": 50
        },
        "account": {
          "$ref": "#/definitions/AccountHref"
        }
      }
    },
    "HandlerPost": {
      "type": "object",
      "description": "Used to create a new handler.",
      "required": [
        "name",
        "file",
        "function",
        "memory",
        "service"
      ],
      "allOf": [
        {
          "type": "object",
          "$ref": "#/definitions/HandlerInitializer"
        },
        {
          "type": "object",
          "$ref": "#/definitions/HandlerConfiguration"
        }
      ]
    },
    "HandlerState": {
      "type": "object",
      "description": "The properties of a handler that are updated automatically as it modified.",
      "additionalProperties": false,
      "properties": {
        "associations": {
          "type": "array",
          "description": "The applications and CDN control paths with which the handler is associated.",
          "items": {
            "$ref": "#/definitions/CdnControlAssociation"
          }
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the handler was created."
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the handler was last updated."
        },
        "xref": {
          "type": "string",
          "description": "A reference to the provider resource implementing the handler."
        }
      }
    },
    "Header": {
      "type": "object",
      "required": [
        "name",
        "value"
      ],
      "properties": {
        "name": {
          "description": "The name of the header to be set.",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$"
        },
        "value": {
          "description": "The value for the specified header.",
          "type": "string",
          "pattern": "^[!\"#$%&'()*+,\\-./0-9:;<=>?@A-Z\\[\\\\\\]^_`a-z{|}~ ]{0,8190}$"
        }
      }
    },
    "HttpUrl": {
      "type": "string",
      "description": "An HTTP URL address.",
      "format": "uri"
    },
    "IdentityConfiguration": {
      "type": "object",
      "description": "Configuration of the identity assigned to cluster servers.",
      "required": [
        "name",
        "client_id",
        "principal_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the identity."
        },
        "client_id": {
          "type": "string",
          "description": "Client ID for the identity to be assigned."
        },
        "principal_id": {
          "type": "string",
          "description": "Principal ID for the identity to be assigned."
        }
      },
      "additionalProperties": false
    },
    "Incident": {
      "type": "object",
      "description": "Represents a time-bounded condition, typically a failure of some system element or service",
      "properties": {
        "href": {
          "$ref": "#/definitions/IncidentHref"
        },
        "state": {
          "type": "string",
          "description": "Current state of the incident",
          "enum": [
            "identified",
            "monitoring",
            "resolved"
          ]
        },
        "severity": {
          "$ref": "#/definitions/EventSeverity"
        },
        "summary": {
          "type": "string",
          "description": "A short description of the incident"
        },
        "type": {
          "type": "string",
          "description": "Identifies the category of the incident. For example proxy-unreachable"
        },
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "resolved": {
          "$ref": "#/definitions/Timestamp"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        },
        "subject": {
          "type": "string",
          "description": "A reference to the subject of the incident. May be null"
        }
      }
    },
    "IncidentHref": {
      "type": "string",
      "description": "The identifier for the underlying incident that triggered the event.",
      "pattern": "^/v2/incidents/[a-z0-9]+$"
    },
    "InstanceFlavor": {
      "type": "string",
      "description": "Specifies the type (size) of instances to be created.",
      "enum": [
        "micro",
        "small",
        "medium",
        "large",
        "xlarge"
      ]
    },
    "InstanceTemplate": {
      "type": "string",
      "pattern": "^\\/v2\\/services\\/[a-z0-9]+(\\/regions\\/[a-zA-Z0-9-_.]+)?\\/instance-templates\\/[a-z0-9-_]+$",
      "description": "The endpoint resource identifier for the instance template."
    },
    "InvoiceItem": {
      "type": "object",
      "required": [
        "due_date",
        "remaining_amount_due",
        "total_amount"
      ],
      "properties": {
        "due_date": {
          "description": "When payment for the invoice is due.",
          "$ref": "#/definitions/Date"
        },
        "remaining_amount_due": {
          "description": "The amount remaining for the invoice.",
          "$ref": "#/definitions/Currency"
        },
        "total_amount": {
          "description": "The total amount of the invoice.",
          "$ref": "#/definitions/Currency"
        }
      }
    },
    "JsonPatch": {
      "description": "An array of JSON patch operations as defined by RFC 6902",
      "type": "array",
      "items": {
        "$ref": "#/definitions/JsonPatchOperation"
      }
    },
    "JsonPatchOperation": {
      "description": "A JSON patch operation as defined by RFC 6902",
      "required": [
        "op",
        "path"
      ],
      "properties": {
        "op": {
          "type": "string",
          "description": "The operation to be performed",
          "enum": [
            "add",
            "remove",
            "replace",
            "move",
            "copy",
            "test"
          ]
        },
        "path": {
          "type": "string",
          "description": "A JSON-Pointer",
          "pattern": "^(/([^/]+))+$"
        },
        "value": {
          "type": [
            "boolean",
            "string",
            "array",
            "object",
            "number"
          ],
          "description": "The value to be used within the operations."
        },
        "from": {
          "type": "string",
          "description": "A string containing a JSON Pointer value.",
          "pattern": "^(/(.*))*(/(.+))+$"
        }
      },
      "additionalProperties": false
    },
    "Key": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/Resource"
        },
        {
          "required": [
            "content"
          ],
          "properties": {
            "content": {
              "type": "string",
              "description": "The contents of the key.  Must not be empty."
            }
          }
        }
      ]
    },
    "LogAddress": {
      "type": "string",
      "description": "The address of the server that recorded the log.",
      "$ref": "#/definitions/Cidr"
    },
    "LogMessage": {
      "type": "string",
      "description": "The contents of the log.",
      "minLength": 1
    },
    "LogPost": {
      "type": "object",
      "required": [
        "created",
        "stream",
        "message",
        "address",
        "filename",
        "hostname"
      ],
      "properties": {
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "The time when the log was recorded."
        },
        "stream": {
          "$ref": "#/definitions/LogStream"
        },
        "message": {
          "$ref": "#/definitions/LogMessage"
        },
        "address": {
          "$ref": "#/definitions/LogAddress"
        },
        "filename": {
          "$ref": "#/definitions/LogFilename"
        },
        "hostname": {
          "$ref": "#/definitions/LogHostname"
        }
      }
    },
    "LogSchema": {
      "description": "A schema describing a particular log.",
      "type": "object",
      "required": [
        "type",
        "display",
        "default_order",
        "fields",
        "retention"
      ],
      "additionalProperties": false,
      "properties": {
        "type": {
          "description": "The type of log being defined.",
          "type": "string",
          "enum": [
            "access",
            "cdn",
            "csp-reports",
            "custom",
            "pageviews",
            "events"
          ]
        },
        "display": {
          "description": "Display name for the type of log being defined.",
          "type": "string",
          "enum": [
            "CDN logs",
            "CSP reports",
            "Pageview logs",
            "Traffic viewer",
            "Event logs"
          ]
        },
        "default_order": {
          "description": "Defines the default behavior for sorting logs based on log fields. Ties are broken with the next log fields described in the ordering.",
          "type": "string"
        },
        "fields": {
          "description": "An array of fields.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Field"
          }
        },
        "retention": {
          "oneOf": [
            {
              "type": "array",
              "description": "Array of applications' Log retention.",
              "items": {
                "$ref": "#/definitions/Retention"
              }
            },
            {
              "type": "object",
              "description": "Account's Log retention.",
              "$ref": "#/definitions/Retention"
            }
          ]
        }
      }
    },
    "LogFilename": {
      "type": "string",
      "description": "The file where the log was written."
    },
    "LogHostname": {
      "type": "string",
      "description": "The hostname of the machine running the Webscale Monitoring Agent."
    },
    "LogStream": {
      "type": "string",
      "description": "The custom defined category to associate the log with."
    },
    "MaximumQueueTime": {
      "type": "integer",
      "description": "Maximum amount of time a request can spend in the suspend queue of a load balancer before it is failed with a timeout. This attribute may only be set by system administrators",
      "minimum": 1
    },
    "MergeSlashes": {
      "type": "boolean",
      "description": "Controls whether the server merges consecutive slashes in URLs. By default, consecutive slashes are merged into a single slash."
    },
    "MetadataEntry": {
      "type": "object",
      "description": "A key/value pair to be made available on servers made with this metadata.",
      "properties": {
        "key": {
          "type": "string",
          "description": "A key name."
        },
        "value": {
          "type": "string",
          "description": "A value associated with the given key."
        }
      },
      "additionalProperties": false
    },
    "MetadataFileEntry": {
      "type": "object",
      "description": "A file reference and where it should be made available on servers made with this metadata.",
      "properties": {
        "file": {
          "type": "string",
          "pattern": "^/v2/files/.*$",
          "description": "A reference to a Webscale file."
        },
        "path": {
          "type": "string",
          "description": "The absolute path where the file is made available on a server made with this blueprint.",
          "pattern": "^\\/[^\\0]*[^\\/]$"
        }
      },
      "additionalProperties": false
    },
    "MetricPrototype": {
      "description": "A metric prototype that can be used to configure a custom metric",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/MetricPrototypeConfiguration"
        },
        {
          "$ref": "#/definitions/MetricPrototypeIdentity"
        },
        {
          "$ref": "#/definitions/MetricPrototypeState"
        }
      ]
    },
    "MetricPrototypeConfiguration": {
      "description": "The configurable attributes of a metric prototype",
      "properties": {
        "default_frequency": {
          "type": "integer",
          "description": "Frequency at which the value of the metrics will be populated in timeseries"
        },
        "default_name": {
          "$ref": "#/definitions/Name",
          "description": "The name of the metric prototype",
          "maxLength": 50,
          "pattern": "^[a-z0-9-_]+$"
        },
        "description": {
          "type": "string",
          "description": "Description about the metric prototype"
        },
        "display": {
          "type": "string",
          "description": "Display name of the metric prototype. If not provided it will be populated from the default name.",
          "pattern": "^[a-z0-9-_]+$"
        },
        "expression": {
          "type": "string",
          "description": "Computation query to calculate the value of the metric",
          "minLength": 1
        },
        "filter": {
          "oneOf": [
            {
              "type": "string",
              "description": "String predicate expression involving log attributes for the specified log type"
            },
            {
              "type": "null",
              "description": "Use null when the logs monitor should not filter out logs while executing"
            }
          ]
        },
        "group_by": {
          "type": "string",
          "description": "An string attribute name for the specified log type that specify grouping"
        },
        "log_type": {
          "type": "string",
          "description": "The type of logs from which the metric values need to be fetched",
          "enum": [
            "cdn-logs",
            "csp-reports",
            "pageviews",
            "proxy-logs"
          ]
        }
      }
    },
    "MetricPrototypeIdentity": {
      "description": "Identifier for a metric prototype",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this metric prototype",
          "pattern": "^/v2/metric-prototypes/[a-z0-9]+$"
        }
      }
    },
    "MetricPrototypePost": {
      "type": "object",
      "allOf": [
        {
          "required": [
            "default_name",
            "expression",
            "log_type"
          ]
        },
        {
          "$ref": "#/definitions/MetricPrototypeConfiguration"
        }
      ]
    },
    "MetricPrototypeState": {
      "type": "object",
      "description": "State values for metric prototype",
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Creation time of this metric prototype"
        },
        "created_by": {
          "type": "integer",
          "description": "Reference to the user that created this metric prototype"
        }
      }
    },
    "Metrics": {
      "description": "Metrics for the given specifications.",
      "type": "object",
      "required": [
        "from",
        "to",
        "resolution",
        "metrics"
      ],
      "properties": {
        "from": {
          "$ref": "#/definitions/Timestamp",
          "description": "Start time for the metrics."
        },
        "to": {
          "$ref": "#/definitions/Timestamp",
          "description": "End time for the metrics."
        },
        "resolution": {
          "type": "integer",
          "description": "Resolution of the time series data returned."
        },
        "metrics": {
          "type": "object",
          "description": "Metrics returned",
          "additionalProperties": {
            "oneOf": [
              {
                "$ref": "#/definitions/MetricValues"
              },
              {
                "$ref": "#/definitions/MetricSummary"
              },
              {
                "$ref": "#/definitions/MultiMetrics"
              }
            ]
          }
        }
      }
    },
    "MetricConfiguration": {
      "type": "object",
      "required": [
        "prototype"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the metric",
          "minLength": 1,
          "maxLength": 50,
          "pattern": "^[a-z0-9-_]+$"
        },
        "frequency": {
          "type": "integer",
          "description": "Frequency at which metrics are populated",
          "default": 60
        },
        "prototype": {
          "type": "string",
          "description": "A reference to the metric prototype",
          "pattern": "^/v2/metric-prototypes/[a-z0-9]+$"
        }
      }
    },
    "MultiMetrics": {
      "description": "An Array of metrics for multiple objects",
      "type": "array",
      "items": {
        "description": "Identification and metric values for objects",
        "type": "object",
        "properties": {
          "name": {
            "description": "Name of the object",
            "type": "string"
          },
          "href": {
            "description": "Href of the object",
            "type": "string"
          },
          "metrics": {
            "description": "Requested metrics of the object",
            "oneOf": [
              {
                "$ref": "#/definitions/MetricValues"
              },
              {
                "$ref": "#/definitions/MetricSummary"
              }
            ]
          }
        }
      }
    },
    "MetricValues": {
      "description": "An array of metric values, one per resolution period",
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "MetricSummary": {
      "description": "A summary value of a metric across the entire returned time range",
      "type": "number"
    },
    "MicrositeArchiveDetails": {
      "type": "object",
      "description": "Details for a microsite archive file",
      "properties": {
        "files": {
          "type": "array",
          "description": "Files contained in the microsite archive",
          "items": {
            "$ref": "#/definitions/MicrositeFileDetails"
          }
        }
      }
    },
    "MicrositeFile": {
      "type": "object",
      "description": "A file object",
      "properties": {
        "updated": {
          "$ref": "#/definitions/Timestamp"
        },
        "name": {
          "type": "string"
        },
        "role": {
          "type": "string",
          "enum": [
            "microsite",
            "waf-rules"
          ]
        },
        "content_type": {
          "type": "string"
        },
        "details": {
          "$ref": "#/definitions/MicrositeArchiveDetails"
        }
      }
    },
    "MicrositeFileDetails": {
      "type": "object",
      "description": "Metadata for a microsite file",
      "properties": {
        "path": {
          "type": "string",
          "description": "Path of the file relative to its root"
        },
        "size": {
          "type": "number",
          "description": "The size of the file in bytes"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "MonitorPost": {
      "type": "object",
      "required": [
        "name",
        "type",
        "labels",
        "parameters"
      ],
      "allOf": [
        {
          "$ref": "#/definitions/MonitorInitializer"
        },
        {
          "$ref": "#/definitions/MonitorConfiguration"
        },
        {
          "properties": {
            "parameters": {
              "anyOf": [
                {
                  "$ref": "#/definitions/SignalMonitorParameters"
                },
                {
                  "required": [
                    "type",
                    "duration",
                    "condition"
                  ],
                  "$ref": "#/definitions/LogsMonitorParameters"
                },
                {
                  "required": [
                    "attribute",
                    "href"
                  ],
                  "$ref": "#/definitions/ObjectMonitorParameters"
                },
                {
                  "$ref": "#/definitions/EmptyObject"
                }
              ]
            }
          }
        }
      ]
    },
    "Monitor": {
      "description": "A generic monitor for monitoring applications, clusters, and other account-level resources and automatically creating and sending notifications",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/MonitorInitializer"
        },
        {
          "$ref": "#/definitions/MonitorConfiguration"
        },
        {
          "$ref": "#/definitions/MonitorIdentity"
        },
        {
          "$ref": "#/definitions/MonitorState"
        }
      ]
    },
    "MonitorAction": {
      "type": "object",
      "description": "An action to be executed when the monitor triggers.",
      "oneOf": [
        {
          "$ref": "#/definitions/MonitorActionEnableShieldMode"
        },
        {
          "$ref": "#/definitions/MonitorActionLogEvents"
        },
        {
          "$ref": "#/definitions/MonitorActionNotify"
        },
        {
          "$ref": "#/definitions/MonitorActionReplaceServer"
        },
        {
          "$ref": "#/definitions/MonitorActionManageTickets"
        }
      ]
    },
    "MonitorActionEnableShieldMode": {
      "description": "Enables shield mode for the monitored application(s).",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "enable_shield_mode"
          ]
        }
      },
      "additionalProperties": false
    },
    "MonitorActionLogEvents": {
      "description": "Publishes monitor activity to the event log.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "log_events"
          ]
        }
      },
      "additionalProperties": false
    },
    "MonitorActionNotify": {
      "description": "Sends monitor notifications to configured recipients.",
      "type": "object",
      "required": [
        "type",
        "message",
        "notify"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "notify"
          ]
        },
        "message": {
          "type": "string"
        },
        "notify": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "MonitorActionReplaceServer": {
      "description": "Replaces server identified by the monitor",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "replace_server"
          ]
        }
      },
      "additionalProperties": false
    },
    "MonitorActionManageTickets": {
      "description": "Manage the tickets through alerts",
      "type": "object",
      "required": [
        "type",
        "message"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "manage_tickets"
          ]
        },
        "message": {
          "type": "string",
          "description": "General text message for manage_tickets action to update in the ticket"
        },
        "service": {
          "type": "string",
          "description": "Ticket service used for communicating with the ticketing tool",
          "pattern": "^\\/v2\\/services\\/[a-z0-9]+$"
        }
      },
      "additionalProperties": false
    },
    "MonitorConfiguration": {
      "description": "The configurable attributes of a monitor",
      "properties": {
        "actions": {
          "type": "array",
          "description": "A sequence of actions executed when the monitor triggers.",
          "items": {
            "$ref": "#/definitions/MonitorAction"
          }
        },
        "name": {
          "type": "string",
          "description": "Name of the monitor",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Description of the monitor",
          "minLength": 0,
          "maxLength": 100
        },
        "labels": {
          "type": "array",
          "description": "An array of labels to which this monitor applies",
          "items": {
            "$ref": "#/definitions/Label"
          },
          "uniqueItems": true
        },
        "message": {
          "type": "string",
          "description": "The template to use to generate the notification message",
          "minLength": 0,
          "maxLength": 10000
        },
        "notify": {
          "type": "array",
          "description": "An array of URLs to which the notification may be sent",
          "items": {
            "$ref": "#/definitions/MonitorNotification"
          },
          "uniqueItems": true
        },
        "log_events": {
          "type": "boolean",
          "description": "A boolean that determines if monitor state changes are added to the event log."
        },
        "parameters": {
          "anyOf": [
            {
              "$ref": "#/definitions/LogsMonitorParameters"
            },
            {
              "$ref": "#/definitions/DataTransferBillingMonitorParameters"
            },
            {
              "$ref": "#/definitions/ObjectMonitorParameters"
            },
            {
              "$ref": "#/definitions/SignalMonitorParameters"
            },
            {
              "$ref": "#/definitions/EmptyObject"
            }
          ]
        }
      }
    },
    "MonitorIdentity": {
      "description": "Identifier for a monitor",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this monitor",
          "pattern": "^/v2/monitors/[a-z0-9]+$"
        }
      }
    },
    "MonitorInitializer": {
      "type": "object",
      "description": "Monitor attributes that cannot be changed after creation.",
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of the monitor",
          "enum": [
            "logs",
            "object-data-plane",
            "signal"
          ]
        }
      }
    },
    "MonitorNotification": {
      "type": "string",
      "description": "A notification to enact when monitoring is completed.",
      "pattern": "^(mailto:.+@.+\\..+)|((https?:)?//([\\w-]{1,63}\\.){1,}[\\w-]{2,63})?((?<!/)/([\\w.\\-~!&'()*+,;=:@?]|%[A-Fa-f0-9]{2}|(?<!/)/)*)?(?<=.)|(victorops:.+/.+)$"
    },
    "MonitorState": {
      "type": "object",
      "description": "The state of the monitor.",
      "properties": {
        "states": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GroupState"
          }
        }
      }
    },
    "Monitoring": {
      "type": "string",
      "description": "The monitoring mode. When active, the application will be monitored regularly from a separate location, in addition to passive monitoring. When passive, the error rate for the application is monitored and used to generate alerts, but if there is no regular activity to the application, then no outage will be detected.",
      "enum": [
        "none",
        "passive",
        "active"
      ]
    },
    "Name": {
      "type": "string",
      "minLength": 1
    },
    "TranslatePath": {
      "type": "string",
      "description": "Configuration to specify the handling of URL paths through the Webscale proxy. The default behavior is to leave the path value untouched (preserve). A value of 'unescape' would remove all escaped characters in the path and replace them with their equivalent unicode character.",
      "enum": [
        "preserve",
        "unescape"
      ]
    },
    "NonNegativeInteger": {
      "type": "integer",
      "description": "An integer of value 0 or more.",
      "minimum": 0
    },
    "LogsMonitorParameters": {
      "type": "object",
      "description": "The configuration of a logs monitor",
      "additionalProperties": false,
      "required": [
        "type",
        "duration",
        "condition"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "The log type that will be monitored",
          "enum": [
            "cdn-logs",
            "csp-reports",
            "pageviews",
            "proxy-logs",
            "custom",
            "events"
          ]
        },
        "duration": {
          "description": "Duration in seconds over which the monitor operates",
          "$ref": "#/definitions/PositiveInteger"
        },
        "group_by": {
          "oneOf": [
            {
              "type": "array",
              "description": "An array of attribute names that determine how logs are grouped during execution",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "maxItems": 1,
              "uniqueItems": true
            },
            {
              "type": "null",
              "description": "Use null to prevent log grouping during execution."
            }
          ]
        },
        "filter": {
          "oneOf": [
            {
              "type": "string",
              "description": "String predicate expression involving log attributes for the specified log type"
            },
            {
              "type": "null",
              "description": "Use null when the logs monitor should not filter out logs while executing"
            }
          ]
        },
        "condition": {
          "type": "string",
          "description": "String predicate expression of the form 'function_name(arg_list)' where arg_list lists one or more arguments (integer, float, string, word)"
        }
      }
    },
    "ObjectMonitorParameters": {
      "type": "object",
      "description": "The configuration of an object monitor",
      "additionalProperties": false,
      "required": [
        "attribute",
        "href"
      ],
      "properties": {
        "attribute": {
          "type": "string",
          "description": "A JMESPath to an attribute of the object being monitored for changes.",
          "enum": [
            "static_ips"
          ]
        },
        "href": {
          "type": "string",
          "description": "A reference to the object being monitored",
          "pattern": "^/v2/[a-z\\-]+/[a-z0-9]+$"
        }
      }
    },
    "SignalMonitorParameters": {
      "type": "object",
      "description": "The configuration of an signal monitor",
      "additionalProperties": false,
      "properties": {
        "inactivity_resolution_interval": {
          "oneOf": [
            {
              "$ref": "#/definitions/NonNegativeInteger",
              "description": "An optional parameter. This parameter represents an amount of time in seconds that must pass while all relevant matched signals are resolved before resolving the state of a signal monitor. "
            },
            {
              "type": "null",
              "description": "Use null to remove inactivity resolution interval in signal monitor"
            }
          ]
        }
      }
    },
    "PageControl": {
      "description": "Conditionally applies a set of actions to a request based on triggering conditions that are evaluated over request attributes.",
      "allOf": [
        {
          "$ref": "#/definitions/PageControlConfiguration"
        },
        {
          "$ref": "#/definitions/PageControlIdentity"
        },
        {
          "$ref": "#/definitions/PageControlState"
        }
      ]
    },
    "WebControl": {
      "description": "Conditionally applies a set of actions to a request based on triggering conditions that are evaluated over request attributes.",
      "allOf": [
        {
          "$ref": "#/definitions/WebControlConfiguration"
        },
        {
          "$ref": "#/definitions/WebControlIdentity"
        },
        {
          "$ref": "#/definitions/WebControlState"
        }
      ]
    },
    "Label": {
      "type": "string",
      "description": "A custom label starting with a lowercase letter following by numbers and lowercase letters. Dashes and underscores are accepted if they are followed by lowercase letters or numbers.",
      "pattern": "^[a-z][0-9a-z]*([-_]+[0-9a-z]+)*$"
    },
    "PageControlAction": {
      "description": "An array of actions to enact on the triggering of a page control.",
      "oneOf": [
        {
          "$ref": "#/definitions/PageControlActionAddIPToList"
        },
        {
          "$ref": "#/definitions/PageControlActionAddLabels"
        },
        {
          "$ref": "#/definitions/PageControlActionCacheOverrides"
        },
        {
          "$ref": "#/definitions/PageControlActionContinue"
        },
        {
          "$ref": "#/definitions/PageControlActionDeny"
        },
        {
          "$ref": "#/definitions/PageControlActionDisableRum"
        },
        {
          "$ref": "#/definitions/PageControlActionDisableSessionTracking"
        },
        {
          "$ref": "#/definitions/PageControlActionDiscontinue"
        },
        {
          "$ref": "#/definitions/PageControlActionDrop"
        },
        {
          "$ref": "#/definitions/PageControlActionRedirect"
        },
        {
          "$ref": "#/definitions/PageControlActionRedirectUsingMap"
        },
        {
          "$ref": "#/definitions/PageControlActionRewriteUrl"
        },
        {
          "$ref": "#/definitions/PageControlActionSetRequestTimeout"
        },
        {
          "$ref": "#/definitions/PageControlActionScriptAddAsync"
        },
        {
          "$ref": "#/definitions/PageControlActionScriptAddDefer"
        },
        {
          "$ref": "#/definitions/PageControlActionSetContentSecurityPolicy"
        },
        {
          "$ref": "#/definitions/PageControlActionSetAuthCookie"
        },
        {
          "$ref": "#/definitions/PageControlActionSetCookie"
        },
        {
          "$ref": "#/definitions/PageControlActionSetPagespeedOptions"
        },
        {
          "$ref": "#/definitions/PageControlActionSetRequestHeader"
        },
        {
          "$ref": "#/definitions/PageControlActionSetResponseHeader"
        },
        {
          "$ref": "#/definitions/PageControlActionServe"
        },
        {
          "$ref": "#/definitions/PageControlActionServeCaptchaChallenge"
        },
        {
          "$ref": "#/definitions/PageControlActionTerminateHttps"
        },
        {
          "$ref": "#/definitions/PageControlActionUseAlternateBackends"
        },
        {
          "$ref": "#/definitions/PageControlActionUserHasRole"
        },
        {
          "$ref": "#/definitions/PageControlActionSubstitute"
        },
        {
          "$ref": "#/definitions/PageControlActionUseServerlessFunction"
        }
      ]
    },
    "PageControlActionAddIPToList": {
      "description": "Add IP address of the request to address set",
      "type": "object",
      "required": [
        "type",
        "address_set"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "add-address-to-set"
          ]
        },
        "address_set": {
          "$ref": "#/definitions/AddressSetHref"
        },
        "ttl": {
          "type": "number",
          "description": "The amount of time in seconds that an IP address will live in a set",
          "minimum": 300
        }
      },
      "additionalProperties": false
    },
    "PageControlActionAddLabels": {
      "description": "Add custom labels to processed traffic. This is a non-final action.",
      "type": "object",
      "required": [
        "type",
        "labels"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "add-labels"
          ]
        },
        "labels": {
          "type": "array",
          "description": "Array of labels that will be attached to matching traffic",
          "items": {
            "$ref": "#/definitions/Label"
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "PageControlActionCacheOverrides": {
      "description": "Update the cache-related headers of responses from backend servers.",
      "type": "object",
      "required": [
        "type",
        "setting"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "cache-overrides"
          ]
        },
        "setting": {
          "description": "Always-cache erases cache control headers and sets the cache control header to 'public' along with removing Pragma and Expires headers, allowing Webscale and browsers to cache affected responses for a default amount of time. Bypass-cache sets the cache control to disallow caching and the header is set to 'no-transform, no-cache, no-store, must-revalidate, max-age=0', ensuring that all responses are uniquely generated. Contents of the cache control header value (which will be used as is, if valid) to be used in place of the one returned from the application server when retrieving a resource",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionContinue": {
      "description": "Continue execution of traffic controls. Non final action",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "continue"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionDeny": {
      "description": "Deny the request with the given status code. Final action",
      "type": "object",
      "required": [
        "type",
        "status_code",
        "body"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "deny"
          ]
        },
        "status_code": {
          "type": "string",
          "description": "Response status code that will be returned as a result of deny action",
          "pattern": "^[1-5]\\d\\d$"
        },
        "body": {
          "type": "string",
          "description": "The response body to send when a request is denied"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionDisableRum": {
      "description": "Disable real user monitoring when RUM is enabled for the application.  No beacon script for collecting RUM metrics will be injected into html responses.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "disable-rum"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionDisableSessionTracking": {
      "description": "Disable Webscale session tracking. No session-tracking cookies will be added to responses.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "disable-session-tracking"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionDiscontinue": {
      "description": "Discontinue execution of traffic controls. Final action that can be used to finalize a set of non-final actions",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "discontinue"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionDrop": {
      "description": "Drop the request. Final action",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "drop"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionRedirect": {
      "description": "Redirect the request. Final action",
      "type": "object",
      "required": [
        "type",
        "status_code",
        "location"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "redirect"
          ]
        },
        "status_code": {
          "type": "string",
          "description": "Response status code that will be returned as a result of redirection",
          "pattern": "^(301|302|303|305|307)$"
        },
        "location": {
          "type": "string",
          "description": "A valid URL with http or https scheme, a hostname, and a path"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionRedirectUsingMap": {
      "description": "Redirect the request using a url map. If the request URL is found in the url map and a redirect occurs, then this is a final action",
      "type": "object",
      "required": [
        "type",
        "preserve_query",
        "status_code",
        "url_map"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "redirect-using-map"
          ]
        },
        "preserve_query": {
          "type": "boolean",
          "description": "When true, query parameters from the request are preserved in the redirect location, unless the location in the url map specifies a query separator (question mark)"
        },
        "status_code": {
          "type": "string",
          "description": "Response status code that will be returned in a redirect response",
          "pattern": "^(301|302|303|305|307)$"
        },
        "url_map": {
          "type": "string",
          "description": "A reference to a url map",
          "pattern": "^/v2/url-maps/[0-9a-z]+$"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionRewriteUrl": {
      "description": "Rewrite the incoming request URL prior to serving it. The rewrite is designed to rewrite the URL path and the query parameters. If the URL scheme or the hostname is attempted to be modified the resulting behavior is unspecified.",
      "type": "object",
      "required": [
        "type",
        "url"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "rewrite-url"
          ]
        },
        "url": {
          "type": "string",
          "description": "A valid URL with http or https scheme, a hostname, and a path"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionScriptAddAsync": {
      "description": "Update matching script elements to add the async attribute.",
      "required": [
        "type",
        "scripts"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "script-add-async"
          ]
        },
        "scripts": {
          "type": "array",
          "description": "Array of urls that has to be made async",
          "items": {
            "$ref": "#/definitions/Script"
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "PageControlActionScriptAddDefer": {
      "description": "Update matching script elements to add the defer attribute.",
      "required": [
        "type",
        "scripts"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "script-add-defer"
          ]
        },
        "scripts": {
          "type": "array",
          "description": "Array of urls that has to be deferred",
          "items": {
            "$ref": "#/definitions/Script"
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetContentSecurityPolicy": {
      "description": "Set a content security policy.",
      "required": [
        "type",
        "value"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-content-security-policy"
          ]
        },
        "value": {
          "description": "CSP action value is a hash where the key is the directive name and the value is the directive value. The directive value is usually an array of strings, but for a couple directives it is a boolean.",
          "type": "object"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetAuthCookie": {
      "description": "Set or extend an authorization cookie. The cookie is valid for a specified duration and a domain and path if specified",
      "required": [
        "duration",
        "name",
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-auth-cookie"
          ]
        },
        "name": {
          "description": "The name of the cookie to be set",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "domain": {
          "type": "string",
          "description": "Optional domain to be sent with cookie",
          "maxLength": 255,
          "pattern": "^[0-9a-zA-Z\\-*.]+$"
        },
        "duration": {
          "type": "integer",
          "description": "The lifespan of the cookie when issued, in seconds. After the cookie is initially sent, it will be refreshed if the expiry is less than 1/2 the duration from the current time"
        },
        "path": {
          "description": "Optional path to be sent with the cookie",
          "type": "string",
          "pattern": "^[!\"#$%&'()*+,\\-./0-9:<=>?@A-Z\\[\\\\\\]^_`a-z{|}~]{0,200}"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetCookie": {
      "description": "Set a response cookie.",
      "required": [
        "name",
        "type",
        "value"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-cookie"
          ]
        },
        "name": {
          "description": "The name of the cookie to be set",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "value": {
          "description": "The value to set for the cookie",
          "type": "string",
          "pattern": "^[!#$%&'()*+\\-./0-9:<=>?@A-Z\\[\\]^_`a-z{|}~]{0,100}$"
        },
        "max_age": {
          "description": "The maximum age of the cookie, in seconds",
          "$ref": "#/definitions/NonNegativeInteger"
        },
        "path": {
          "description": "The path to which the cookie applies",
          "type": "string",
          "pattern": "^[!\"#$%&'()*+,\\-./0-9:<=>?@A-Z\\[\\\\\\]^_`a-z{|}~]{0,200}"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetPagespeedOptions": {
      "description": "Provides options for the pagespeed integration",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-pagespeed-options"
          ]
        },
        "disable_filters": {
          "type": "array",
          "description": "Array of filter names to disable. See the enable_filters attribute for the filters enabled by default",
          "items": {
            "$ref": "#/definitions/PagespeedFilterName"
          }
        },
        "enable": {
          "type": "boolean",
          "description": "Set to false to disable pagespeed processing",
          "default": "true"
        },
        "enable_filters": {
          "type": "array",
          "description": "Array of filter names to enable. The filters enabled by default are: add_head, canonicalize_javascript_libraries, combine_css, convert_meta_tags, extend_cache, fallback_rewrite_css_urls, flatten_css_imports, inline_css, inline_import_to_link, inline_javascript, insert_dns_prefetch, rewrite_css, rewrite_images, rewrite_javascript, and rewrite_style_attributes_with_url",
          "items": {
            "$ref": "#/definitions/PagespeedFilterName"
          }
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetRequestHeader": {
      "description": "Set a request header before a request is sent to a backend server.",
      "required": [
        "name",
        "type",
        "value"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-request-header"
          ]
        },
        "name": {
          "description": "The name of the header to be set",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$"
        },
        "value": {
          "description": "The value for the specified header",
          "type": "string",
          "pattern": "^[!\"#$%&'()*+,\\-./0-9:;<=>?@A-Z\\[\\\\\\]^_`a-z{|}~ ]{0,8190}$"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetRequestTimeout": {
      "description": "Set timeout for a request",
      "type": "object",
      "required": [
        "type",
        "timeout"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-request-timeout"
          ]
        },
        "timeout": {
          "$ref": "#/definitions/PositiveInteger",
          "description": "Timeout specified in seconds for which a request can be served"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSetResponseHeader": {
      "description": "Set a response header before a response is returned to a web browser.",
      "required": [
        "name",
        "type",
        "value"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "set-response-header"
          ]
        },
        "name": {
          "description": "The name of the header to be set",
          "type": "string",
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,100}$"
        },
        "value": {
          "description": "The value for the specified header",
          "type": "string",
          "pattern": "^[!\"#$%&'()*+,\\-./0-9:;<=>?@A-Z\\[\\\\\\]^_`a-z{|}~ ]{0,65536}$"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionServe": {
      "description": "Serve the microsite resource specified by a relative path with a specified status code. If the resource does not exist in the application's microsite, then the file index.html is used instead, which is guaranteed to exist.",
      "type": "object",
      "required": [
        "type",
        "code",
        "path"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "serve"
          ]
        },
        "code": {
          "description": "The HTTP status code to return",
          "type": "string",
          "pattern": "^[1-5][0-9]{2}$"
        },
        "file": {
          "description": "A reference to the file to be served.",
          "$ref": "#/definitions/FileHref"
        },
        "path": {
          "description": "The file path for the page to serve",
          "type": "string",
          "pattern": "^[^/]"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionServeCaptchaChallenge": {
      "description": "Issue a reCaptcha challenge to the user for all incoming requests unless the user has successfully completed a validation before.",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "serve-captcha-challenge"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionTerminateHttps": {
      "description": "Use HTTP to communicate with backend servers regardless of the request protocol. Final action",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "terminate-https"
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionUseAlternateBackends": {
      "description": "Use different servers than the default for matching requests. Final action",
      "type": "object",
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "use-alternate-backends"
          ]
        },
        "cluster": {
          "description": "A reference to a cluster to which traffic is sent. One of cluster or servers is required",
          "$ref": "#/definitions/ClusterHref",
          "default": "null"
        },
        "servers": {
          "description": "A list of IP addresses to which traffic is sent. One of cluster or servers is required",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ApplicationServer"
          },
          "uniqueItems": true
        },
        "servers_hostname": {
          "$ref": "#/definitions/ServersHostname"
        },
        "remote_url": {
          "oneOf": [
            {
              "type": "null",
              "description": "No remote url is set"
            },
            {
              "type": "string",
              "description": "A URL used to access backend servers. This URL may omit the scheme. If the scheme is set, then that scheme will be used to access the backend server regardless of the request scheme. When a hostname is provided in the URL, then it will be used instead of the request hostname. If a path is provided, the pathname requested from the backend server will be the path formed by joining the URL path and the request path. <h3>Examples</h3><table><thead><tr><th>Request URL</th><th>Remote URL</th><th>Effective URL</th></tr></thead><tbody><tr><td>https://example.com/page</td><td>—</td><td>https://example.com/page</td></tr><tr><td>https://example.com/page</td><td>/prefix</td><td>https://example.com/prefix/page</td></tr><tr><td>https://example.com/page</td><td>//althost.com/</td><td>https://althost.com/page</td></tr><tr><td>https://example.com/page</td><td>//althost.com/prefix</td><td>https://althost.com/prefix/page</td></tr><tr><td>https://example.com/page</td><td>http://althost.com/prefix</td><td>http://althost.com/prefix/page</td></tr></tbody></table>",
              "pattern": "^((https?:)?\\/\\/(([\\w-]{1,63}\\.){1,}[\\w-]{2,63}|\\*)(:(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3}))?(\\/([\\w\\.\\-~!&'\\(\\)\\*\\+,;=:@\\?\\/]|%[A-Fa-f0-9]{2})*)?|\\/([\\w\\.\\-~!&'\\(\\)\\*\\+,;=:@\\?\\/]|%[A-Fa-f0-9]{2})*)$"
            }
          ]
        },
        "relative_to": {
          "oneOf": [
            {
              "type": "null",
              "description": "No relative to path set"
            },
            {
              "type": "string",
              "description": "A path in the URL space of the application at which the resources obtained from the backend server are mapped. If not used with a condition that only matches URL paths that begin with this value, then the result may be unpredictable. The path mapping logically happens before any mapping performed by the remote_url attribute. <h3>Examples</h3><table><thead><tr><th>Request URL</th><th>Relative to</th><th>Effective path</th></tr></thead><tbody><tr><td>/</td><td>—</td><td>/</td></tr><tr><td>/base</td><td>—</td><td>/base</td></tr><tr><td>/base</td><td>/base</td><td>/</td></tr><tr><td>/base/page</td><td>/base</td><td>/page</td></tr></tbody></table>",
              "pattern": "^/([\\w.\\-~!$&'()*+,;=:@/]|%[A-Fa-f0-9]{2})*?$"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "PageControlActionUserHasRole": {
      "description": "Limit access to accounts and applications to users belonging to the given role.",
      "type": "object",
      "required": [
        "type",
        "roles"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "user-has-role"
          ]
        },
        "roles": {
          "type": "array",
          "description": "Users must belong to at least one of these roles",
          "items": {
            "type": "string",
            "minLength": 1,
            "pattern": "^\\/v2\\/accounts\\/[a-z0-9]+\\/roles\\/[a-z0-9]+$"
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    },
    "PageControlActionSubstitute": {
      "description": "Substitute a string with an alternate string.",
      "type": "object",
      "required": [
        "type",
        "substitutes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "substitute"
          ]
        },
        "substitutes": {
          "type": "array",
          "description": "Array of substitutes.",
          "$ref": "#/definitions/Substitutes"
        }
      },
      "additionalProperties": false
    },
    "PageControlActionUseServerlessFunction": {
      "description": "Allows the user to invoke serverless function",
      "type": "object",
      "required": [
        "function"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "use-serverless-function"
          ]
        },
        "function": {
          "$ref": "#/definitions/HandlerHref"
        }
      },
      "additionalProperties": false
    },
    "PageControlConditionAuthCookieIsNotSet": {
      "description": "Test to see if a named authorization cookie is not set or is expired.",
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        }
      }
    },
    "PageControlConditionAuthCookieIsSet": {
      "description": "Test to see if a named authorization cookie is set and not expiredd.",
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        }
      }
    },
    "PageControlConditionCookieIsNotSet": {
      "description": "Test to see if a named cookie is not set.",
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        }
      }
    },
    "PageControlConditionCookieIsSet": {
      "description": "Test to see if a named cookie is set.",
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        }
      }
    },
    "PageControlConditionCookieValueDoesNotMatch": {
      "description": "Test to check if the named cookie value does not match the specified pattern. If the specified cookie does not exist, this condition will evaluate to true. Cookie value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with cookie value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        }
      }
    },
    "PageControlConditionCookieValueMatches": {
      "description": "Test to check if the named cookie value matches the specified pattern. Cookie value pattern must be a regular expression.",
      "type": "object",
      "required": [
        "name",
        "pattern"
      ],
      "properties": {
        "name": {
          "description": "Name of the cookie to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with cookie value",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        }
      }
    },
    "PageControlConditionHeaderValueMatches": {
      "description": "Test to check if the header value matches the specified pattern. Header value pattern must be a regular expression",
      "type": "object",
      "required": [
        "name",
        "pattern"
      ],
      "properties": {
        "name": {
          "description": "Name of the header to test",
          "type": "string",
          "minLength": 1,
          "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]{1,50}$"
        },
        "pattern": {
          "description": "A regular expression to match with header",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        }
      }
    },
    "PageControlMethodIsIncluded": {
      "description": "Tests if the method name of a request is included in the specified list.",
      "type": "object",
      "required": [
        "values"
      ],
      "properties": {
        "values": {
          "$ref": "#/definitions/MethodNames"
        }
      }
    },
    "PageControlMethodIsNotIncluded": {
      "description": "Tests if the method name of a request is excluded from the specified list.",
      "type": "object",
      "required": [
        "values"
      ],
      "properties": {
        "values": {
          "$ref": "#/definitions/MethodNames"
        }
      }
    },
    "PageControlConditionCountryIsIncluded": {
      "description": "Tests if the country of origin of a request is included in the specified list.",
      "type": "object",
      "required": [
        "list"
      ],
      "properties": {
        "list": {
          "$ref": "#/definitions/CountryCodes"
        }
      }
    },
    "PageControlConditionCountryIsNotIncluded": {
      "description": "Tests if the country of origin of a request is excluded from the specified list.",
      "type": "object",
      "required": [
        "list"
      ],
      "properties": {
        "list": {
          "$ref": "#/definitions/CountryCodes"
        }
      }
    },
    "PageControlConditionRandom": {
      "description": "A test based on generating a random variable and triggering on a specified probability ",
      "type": "object",
      "required": [
        "probability"
      ],
      "properties": {
        "probability": {
          "description": "Probability for which condition is true",
          "type": "number"
        }
      }
    },
    "PageControlConditionRateLimit": {
      "description": "True when the number of request during a duration is greater than a specified threshold.",
      "type": "object",
      "required": [
        "duration",
        "display_unit",
        "threshold"
      ],
      "properties": {
        "duration": {
          "type": "integer",
          "description": "The amount of time, in number of seconds, over which to accumulate the request count",
          "minimum": 5
        },
        "display_unit": {
          "$ref": "#/definitions/DurationDisplayUnit"
        },
        "threshold": {
          "description": "Maximum number of requests in the given duration before the condition is triggered",
          "type": "integer",
          "minimum": 1
        }
      }
    },
    "PageControlConditions": {
      "description": "The conditions that cause a page control to trigger",
      "type": "object",
      "properties": {
        "address_is_whitelisted": {
          "description": "The actions will be applied to whitelist addresses",
          "type": "object"
        },
        "address_is_not_whitelisted": {
          "description": "The actions will be applied to all the incoming IP addresses except whitelist addresses. By default, actions are applied to whitelist addresses",
          "type": "object"
        },
        "auth_cookie_is_not_set": {
          "description": "Tests if an authorization cookie is not set or is expired",
          "$ref": "#/definitions/PageControlConditionAuthCookieIsNotSet"
        },
        "auth_cookie_is_set": {
          "description": "Tests if an unexpired authorization cookie is set",
          "$ref": "#/definitions/PageControlConditionAuthCookieIsSet"
        },
        "cookie_is_not_set": {
          "description": "Tests if a request cookie is not set",
          "$ref": "#/definitions/PageControlConditionCookieIsNotSet"
        },
        "cookie_is_set": {
          "description": "Tests if a request cookie is set",
          "$ref": "#/definitions/PageControlConditionCookieIsSet"
        },
        "cookie_value_does_not_match": {
          "description": "Test to check if the named cookie value does not match the specified pattern. If the specified cookie does not exist, this condition will evaluate to true.",
          "$ref": "#/definitions/PageControlConditionCookieValueDoesNotMatch"
        },
        "cookie_value_matches": {
          "description": "Test to check if the named cookie value matches the specified pattern.",
          "$ref": "#/definitions/PageControlConditionCookieValueMatches"
        },
        "country_is_not": {
          "description": "Tests if the country of origin of a request is excluded from the specified list",
          "$ref": "#/definitions/PageControlConditionCountryIsNotIncluded"
        },
        "country_is": {
          "description": "Tests if the country of origin of a request is included in the specified list",
          "$ref": "#/definitions/PageControlConditionCountryIsIncluded"
        },
        "header_value_matches": {
          "description": "Test to check if the header value matches the specified pattern",
          "$ref": "#/definitions/PageControlConditionHeaderValueMatches"
        },
        "header_value_does_not_match": {
          "description": "Test to check if the header value does not match the specified pattern. If the specified header does not exist, this condition will evaluate to true.",
          "$ref": "#/definitions/PageControlConditionHeaderValueMatches"
        },
        "headers_match": {
          "description": "Test to check if the list of named header values match their respective specified patterns.",
          "$ref": "#/definitions/ConditionHeaders"
        },
        "headers_not_match": {
          "description": "Test to check if the list of named header values does not match their respective specified patterns.",
          "$ref": "#/definitions/ConditionHeaders"
        },
        "method_is": {
          "description": "Test to check if method name is included in the specified list",
          "$ref": "#/definitions/PageControlMethodIsIncluded"
        },
        "method_is_not": {
          "description": "Test to check if method name is excluded from the specified list",
          "$ref": "#/definitions/PageControlMethodIsNotIncluded"
        },
        "address_is_threat": {
          "description": "Tests if the requester's IP address is a known malicious source.",
          "type": "object"
        },
        "address_is_not_threat": {
          "description": "Tests if the requester's IP address is not a known mailicious source.",
          "type": "object"
        },
        "is_crawler": {
          "description": "The actions will be applied to requests from known web crawlers.",
          "type": "object"
        },
        "address_in_set": {
          "description": "The actions will be applied to requests for which request address matches one of the addresses from the specified set",
          "$ref": "#/definitions/PageControlConditionAddressInSet"
        },
        "address_not_in_set": {
          "description": "The actions will be applied to requests for which request address does not match one of the addresses from the specified set",
          "$ref": "#/definitions/PageControlConditionAddressNotInSet"
        },
        "random": {
          "description": "Trigger based on a random value",
          "$ref": "#/definitions/PageControlConditionRandom"
        },
        "rate_limit": {
          "description": "Trigger based on a rate limit",
          "$ref": "#/definitions/PageControlConditionRateLimit"
        },
        "referrer_is": {
          "description": "The actions will be applied to requests for which request referrer matches with the given referrer",
          "type": "array",
          "items": {
            "description": "Tests if referrer of a request matches with the given referrer",
            "type": "string",
            "maxLength": 255
          }
        },
        "referrer_is_not": {
          "description": "The actions will be applied to requests for which request referrer does not match with the given referrer",
          "type": "array",
          "items": {
            "description": "Tests if referrer of a request matches with the given referrer",
            "type": "string",
            "maxLength": 255
          }
        },
        "referrer_is_defined": {
          "description": "The actions will be applied to requests for which request referrer matches with one of the application aliases",
          "type": "object"
        },
        "referrer_is_not_defined": {
          "description": "The actions will be applied to requests for which request referrer does not match with one of the application aliases",
          "type": "object"
        },
        "status_code_matches": {
          "description": "Test to check if the response status code matches the pattern.",
          "$ref": "#/definitions/PageControlConditionStatusCodeMatches"
        },
        "urls": {
          "description": "Array of urls that a request must match one of to trigger the page control.",
          "$ref": "#/definitions/ConditionUrls"
        },
        "url_is_not": {
          "description": "Array of url objects that a request must not match any of to trigger the page control.",
          "$ref": "#/definitions/ConditionUrls"
        },
        "user_agent_matches": {
          "description": "The actions will be applied to requests for which user-agent matches with the given user-agent regular expression",
          "$ref": "#/definitions/PageControlConditionUserAgentMatches"
        },
        "user_agent_does_not_match": {
          "description": "The actions will be applied to requests for which user-agent does not match with the given user-agent regular expression",
          "$ref": "#/definitions/PageControlConditionUserAgentDoesNotMatch"
        }
      }
    },
    "PageControlConditionStatusCodeMatches": {
      "description": "Test to see if the response status code matches the pattern.",
      "type": "object",
      "required": [
        "pattern"
      ],
      "properties": {
        "pattern": {
          "description": "A regular expression to match against the response status code.",
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "format": "regex"
        }
      }
    },
    "PageControlConditionAddressInSet": {
      "description": "Tests if requester's IP address is in the specified address set",
      "type": "object",
      "required": [
        "address_set"
      ],
      "properties": {
        "address_set": {
          "$ref": "#/definitions/AddressSetHref"
        }
      },
      "additionalProperties": false
    },
    "PageControlConditionAddressNotInSet": {
      "description": "Tests if requester's IP address is not in the specified address set",
      "type": "object",
      "required": [
        "address_set"
      ],
      "properties": {
        "address_set": {
          "$ref": "#/definitions/AddressSetHref"
        }
      },
      "additionalProperties": false
    },
    "PageControlConditionUserAgentDoesNotMatch": {
      "description": "Test if user-agent of a request does not match the given regular expression",
      "type": "object",
      "required": [
        "pattern"
      ],
      "properties": {
        "pattern": {
          "description": "A regular expression to match with user-agent",
          "type": "string",
          "minLength": 1
        }
      }
    },
    "PageControlConditionUserAgentMatches": {
      "description": "Test if user-agent of a request matches the given regular expression",
      "type": "object",
      "required": [
        "pattern"
      ],
      "properties": {
        "pattern": {
          "description": "A regular expression to match with user-agent",
          "type": "string",
          "minLength": 1
        }
      }
    },
    "PageControlConfiguration": {
      "description": "Configuration for a page control",
      "required": [
        "actions",
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Short name describing the page control.",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Optional additional description of the page control.",
          "minLength": 0,
          "maxLength": 255
        },
        "mode": {
          "type": "string",
          "description": "Set as 'maintenance' for maintenance mode page control.",
          "enum": [
            "maintenance",
            "request",
            "response"
          ]
        },
        "enabled": {
          "description": "Enables or disables the page control.",
          "type": "boolean"
        },
        "conditions": {
          "description": "Conditions that must be satisfied to trigger the page control.  If no conditions are specified then the page control will trigger unconditionally",
          "$ref": "#/definitions/PageControlConditions"
        },
        "actions": {
          "type": "array",
          "description": "Actions that are applied when the page control is triggered.",
          "items": {
            "$ref": "#/definitions/PageControlAction"
          },
          "minItems": 0
        }
      }
    },
    "PageControlIdentity": {
      "description": "Identifier for a page control",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this page control",
          "pattern": "^/v2/applications/[a-z0-9]+/pagecontrols/\\d+$"
        }
      }
    },
    "WebControlIdentity": {
      "description": "Identifier for a web control",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this web control",
          "pattern": "^/v2/applications/[a-z0-9]+/webcontrols/\\d+$"
        }
      }
    },
    "PageControlState": {
      "properties": {
        "version": {
          "description": "The version of the page control. Versions are numbered, beginning with 1 and increase every time the page control is changed",
          "type": "integer"
        },
        "created": {
          "description": "When this version of the page control was created",
          "$ref": "#/definitions/Timestamp"
        },
        "deleted": {
          "description": "When the page control was deleted. Not present if it was not deleted",
          "$ref": "#/definitions/Timestamp"
        },
        "history": {
          "type": "array",
          "description": "All previous versions of this page control",
          "items": {
            "$ref": "#/definitions/PageControl"
          }
        }
      }
    },
    "WebControlState": {
      "properties": {
        "version": {
          "description": "The version of the web control. Versions are numbered, beginning with 1 and increase every time the web control is changed",
          "type": "integer"
        },
        "created": {
          "description": "When this version of the web control was created",
          "$ref": "#/definitions/Timestamp"
        },
        "deleted": {
          "description": "When the web control was deleted. Not present if it was not deleted",
          "$ref": "#/definitions/Timestamp"
        },
        "history": {
          "type": "array",
          "description": "All previous versions of this web control",
          "items": {
            "$ref": "#/definitions/WebControl"
          }
        }
      }
    },
    "PagespeedFilterName": {
      "type": "string",
      "enum": [
        "add_base_tag",
        "add_head",
        "add_ids",
        "add_instrumentation",
        "cache_partial_html",
        "canonicalize_javascript_libraries",
        "collapse_whitespace",
        "combine_css",
        "combine_javascript",
        "combine_heads",
        "compute_statistics",
        "compute_critical_css",
        "convert_gif_to_png",
        "convert_jpeg_to_progressive",
        "convert_jpeg_to_webp",
        "convert_meta_tags",
        "convert_png_to_jpeg",
        "convert_to_webp_animated",
        "convert_to_webp_lossless",
        "debug",
        "decode_rewritten_urls",
        "dedup_inlined_images",
        "defer_iframe",
        "defer_javascript",
        "deterministic_js",
        "disable_javascript",
        "div_structure",
        "elide_attributes",
        "experiment_collect_mob_image_info",
        "explicit_close_tags",
        "extend_cache_css",
        "extend_cache_images",
        "extend_cache_pdfs",
        "extend_cache_scripts",
        "fallback_rewrite_css_urls",
        "fix_reflows",
        "flatten_css_imports",
        "flush_subresources",
        "in_place_optimize_for_browser",
        "include_js_source_maps",
        "inline_css",
        "inline_google_font_css",
        "inline_images",
        "inline_import_to_link",
        "inline_javascript",
        "inline_preview_images",
        "insert_dns_prefetch",
        "insert_ga",
        "insert_img_dimensions",
        "insert_image_dimensions",
        "jpeg_subsampling",
        "lazyload_images",
        "local_storage_cache",
        "left_trim_urls",
        "make_google_analytics_async",
        "make_show_ads_async",
        "mobilize",
        "mobilize_precompute",
        "move_css_above_scripts",
        "move_css_to_head",
        "outline_css",
        "outline_javascript",
        "pedantic",
        "prioritize_critical_css",
        "recompress_jpeg",
        "recompress_png",
        "recompress_webp",
        "remove_comments",
        "remove_quotes",
        "resize_images",
        "resize_mobile_images",
        "resize_rendered_image_dimensions",
        "responsive_images",
        "responsive_images_zoom",
        "rewrite_css",
        "rewrite_domains",
        "rewrite_javascript_external",
        "rewrite_javascript_inline",
        "rewrite_style_attributes",
        "rewrite_style_attributes_with_url",
        "split_html",
        "split_html_helper",
        "sprite_images",
        "strip_image_color_profile",
        "strip_image_meta_data",
        "strip_scripts",
        "trim_urls"
      ]
    },
    "PaymentItem": {
      "type": "object",
      "required": [
        "amount",
        "date"
      ],
      "properties": {
        "amount": {
          "description": "The amount paid.",
          "$ref": "#/definitions/Currency"
        },
        "date": {
          "description": "When the payment was made.",
          "$ref": "#/definitions/Date"
        }
      }
    },
    "Permissions": {
      "type": "object",
      "required": [
        "method",
        "spec",
        "effect"
      ],
      "additionalProperties": false,
      "properties": {
        "method": {
          "description": "The HTTP method to which the permission applies.",
          "type": "string",
          "enum": [
            "POST",
            "GET",
            "PUT",
            "PATCH",
            "DELETE"
          ]
        },
        "spec": {
          "type": "array",
          "description": "A collection of API specifications",
          "items": {
            "description": "RFC 3986 URL-encoded API endpoint. A single wildcard will match up to the path delimiter '/'. A double wildcard will match across path delimiters.",
            "type": "string",
            "pattern": "^[a-zA-Z0-9._\\-~!$&'()*+,;=:@/%]*$"
          },
          "uniqueItems": true
        },
        "effect": {
          "description": "Permit or deny permission",
          "type": "string",
          "enum": [
            "permit",
            "deny"
          ]
        }
      }
    },
    "PlacementHref": {
      "oneOf": [
        {
          "$ref": "#/definitions/ProviderResourceHref"
        },
        {
          "$ref": "#/definitions/ServerGroupHref"
        }
      ]
    },
    "Plan": {
      "description": "Blueprint of a plan for all the applications",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/PlanIdentity"
        },
        {
          "$ref": "#/definitions/PlanConfiguration"
        },
        {
          "$ref": "#/definitions/PlanState"
        }
      ]
    },
    "PlanConfiguration": {
      "type": "object",
      "description": "The configurable attribute of a plan",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier to identify the plan."
        },
        "name": {
          "type": "string",
          "description": "Name of the plan."
        },
        "attrs": {
          "type": "object",
          "description": "Attribtues of a plan",
          "additionalProperties": false,
          "properties": {
            "adcpools": {
              "type": "array",
              "description": "An array of number for the available adcpools",
              "items": {
                "type": "number"
              }
            },
            "application_testing_allocated_users": {
              "type": "number",
              "description": "Allocated application testing users"
            },
            "application_testing_allocated_virtual_user_minutes": {
              "type": "number",
              "description": "Allocated application testing virtual user minutes"
            },
            "application_testing_virtual_user_minute_price": {
              "type": "number",
              "description": "Price of virtual user minute"
            },
            "data_transfer_allowance": {
              "type": "number",
              "description": "Data transfer allowance"
            },
            "data_transfer_allowance_period": {
              "type": "number",
              "description": "Data transfer allowance period"
            },
            "enable_application_testing": {
              "type": "boolean",
              "description": "When enabled, application testing feature is enabled"
            },
            "enable_app_shielding": {
              "type": "boolean",
              "description": "When enabled, app shielding feature is enabled"
            },
            "enable_autoscaler": {
              "type": "boolean",
              "description": "When enabled, autoscaler feature is enabled"
            },
            "enable_cdn": {
              "type": "boolean",
              "description": "When enabled, CDN feature is enabled"
            },
            "enable_custom_logs": {
              "type": "boolean",
              "description": "When enabled, custom logs feature is enabled"
            },
            "enable_geolocation": {
              "type": "boolean",
              "description": "When enabled, geolocation feature is enabled"
            },
            "enable_logs": {
              "type": "boolean",
              "description": "When enabled, logs are enabled"
            },
            "enable_optimization": {
              "type": "boolean",
              "description": "When enabled, optimization feature is enabled"
            },
            "enable_page_control_actions": {
              "type": "array",
              "description": "An array of string for the available webcontrol actions",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "enable_page_control_conditions": {
              "type": "array",
              "description": "An array of string for the available webcontrol conditions",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "enable_ranges": {
              "type": "array",
              "description": "An array of string for the specified ranges",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "enable_security_monitoring": {
              "type": "boolean",
              "description": "When enabled, security monitoring feature is enabled"
            },
            "enable_site_cache": {
              "type": "boolean",
              "description": "When enabled, site cache feature is enabled"
            },
            "enable_rate_limit": {
              "type": "boolean",
              "description": "When enabled, rate limit feature is enabled"
            },
            "site_cache_max_metadata_entries": {
              "type": "number",
              "description": "Maximum site cache metadata entries"
            },
            "enable_threats_portlet": {
              "type": "boolean",
              "description": "When enabled, threats portlet feature is enabled"
            },
            "enable_views": {
              "type": "array",
              "description": "An array of string for different available views",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "hosting_allowance": {
              "type": "array",
              "description": "An array of string for different available views",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "category",
                  "type",
                  "count"
                ],
                "properties": {
                  "category": {
                    "type": "string",
                    "description": "Category of hosting allowance"
                  },
                  "count": {
                    "type": "number",
                    "description": "Count of resources for the given category"
                  },
                  "type": {
                    "type": "array",
                    "description": "Array of image types",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1
                  }
                }
              },
              "minItems": 1
            },
            "log_retention": {
              "type": "array",
              "description": "An array of log retention plan configuration objects",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Type of log retention",
                    "enum": [
                      "default",
                      "cdn",
                      "csp-reports",
                      "pageviews",
                      "proxy-logs",
                      "events",
                      "custom"
                    ]
                  },
                  "online_days": {
                    "type": "number",
                    "description": "Number of online days"
                  },
                  "archive_days": {
                    "type": "number",
                    "description": "Number of archive days"
                  },
                  "online_space_allowance": {
                    "type": "number",
                    "description": "Allowance for online space"
                  },
                  "archive_space_allowance": {
                    "type": "number",
                    "description": "Allowance for archive space"
                  }
                }
              },
              "minItems": 1
            },
            "maintenance_mode": {
              "type": "boolean",
              "description": "When enabled, maintenance mode is enabled"
            },
            "max_adc_count": {
              "type": "number",
              "description": "Total number of ADCs"
            },
            "alias_count": {
              "type": "number",
              "description": "The number of aliases per an application"
            },
            "monitoring_available": {
              "type": "array",
              "description": "An array of string for the different available monitoring types",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "monthly_bill": {
              "type": "number",
              "description": "Total monthly bill"
            },
            "monthly_data_transfer_limit": {
              "type": "number",
              "description": "Total limit of the monthly data transfer"
            },
            "num_page_controls": {
              "type": "number",
              "description": "Number of page controls"
            },
            "primary": {
              "type": "boolean",
              "description": "When enabled, primary feature is enabled"
            },
            "protections_available": {
              "type": "array",
              "description": "An array of string for the available protection types",
              "items": {
                "type": "string"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "site_cache_space": {
              "type": "number",
              "description": "Available site cache space"
            },
            "target_adc_count": {
              "type": "number",
              "description": "Number of target ADC count"
            },
            "shared_data_planes": {
              "type": "array",
              "description": "An array of shared dataplane references",
              "items": {
                "type": "string",
                "description": "A reference to the data plane.",
                "pattern": "^/v2/data-planes/[a-z0-9]+$"
              },
              "minItems": 1,
              "uniqueItems": true
            },
            "dedicated_data_plane_count": {
              "type": "number",
              "description": "Count of dedicated dataplane"
            }
          }
        },
        "subject_type": {
          "type": "string",
          "description": "The subject of the plan"
        }
      }
    },
    "PlanIdentity": {
      "description": "Identifier for a plan",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this plan",
          "pattern": "^/v2/plans/[a-z0-9]+$"
        }
      }
    },
    "PlanState": {
      "type": "object",
      "description": "State values for plan",
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "Creation time of this plan"
        },
        "created_by": {
          "type": "integer",
          "description": "Reference to the user that created this plan"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp",
          "description": "Update time of this plan"
        },
        "updated_by": {
          "type": "integer",
          "description": "Reference to the user that updated this plan"
        }
      }
    },
    "PlanPost": {
      "type": "object",
      "required": [
        "id",
        "name",
        "attrs"
      ],
      "allOf": [
        {
          "$ref": "#/definitions/PlanConfiguration"
        }
      ]
    },
    "PlanReadWrite": {
      "type": "object",
      "required": [
        "href"
      ],
      "properties": {
        "href": {
          "type": "string",
          "description": "The plan reference.",
          "minLength": 1,
          "maxLength": 50
        }
      }
    },
    "PositiveInteger": {
      "type": "integer",
      "description": "An integer of value 1 or more.",
      "minimum": 1
    },
    "PrepareForDownload": {
      "description": "Create Prepare archives for download task",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "prepare-for-download"
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "required": [
            "reference",
            "from",
            "to"
          ],
          "properties": {
            "reference": {
              "type": "string",
              "description": "The archived-logs reference.",
              "pattern": "^\\/v2\\/archived-logs\\/.+$"
            },
            "from": {
              "description": "The start of when to prepare files for download. Must be An hourly boundary timestamp.",
              "$ref": "#/definitions/Timestamp"
            },
            "to": {
              "description": "The end of when to prepare files for download. Must be on an hourly boundary.",
              "$ref": "#/definitions/Timestamp"
            },
            "retention": {
              "description": "The number of days the retrieved logs will be available for download.",
              "type": "integer",
              "maximum": 30,
              "minimum": 3
            },
            "restore_type": {
              "description": " The Method used to retrieve files from long term storage.",
              "enum": [
                "bulk",
                "standard",
                "expedited"
              ]
            }
          }
        }
      }
    },
    "ProcessLog": {
      "type": "object",
      "properties": {
        "process_id": {
          "type": "string",
          "description": "The id of the process running the task"
        },
        "thread_id": {
          "type": "string",
          "description": "The id of the thread running the task"
        },
        "activity": {
          "type": "string",
          "description": "The activity that generated this log message"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "Time that the log message was created"
        },
        "severity": {
          "$ref": "#/definitions/EventSeverity"
        },
        "message": {
          "type": "string",
          "description": "The log message"
        }
      }
    },
    "Provider": {
      "type": "object",
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp",
          "description": "The provider was created at this time"
        },
        "href": {
          "$ref": "#/definitions/ProviderHref",
          "description": "The endpoint for the provider resource"
        },
        "name": {
          "$ref": "#/definitions/Name",
          "description": "Name given to the cloud provider"
        },
        "type": {
          "type": "string",
          "enum": [
            "aliyun",
            "aws",
            "centurylink",
            "cloudsigma",
            "google"
          ],
          "description": "Type of the cloud provider."
        },
        "links": {
          "$ref": "#/definitions/ProviderAttributes"
        }
      }
    },
    "ProviderAttributes": {
      "type": "object",
      "description": "Provider attributes that represent cloud provider attributes and may be queried via the API."
    },
    "ProviderHref": {
      "type": "string",
      "pattern": "^\\/v2\\/providers\\/[a-z0-9]+$",
      "description": "Resource identifier for the provider, must be a URL encoded string."
    },
    "ProviderResourceHref": {
      "type": "string",
      "pattern": "^(\\/v2\\/providers\\/[a-z0-9]+)(.*)",
      "description": "Resource href that includes the Webscale provider identifier."
    },
    "ProviderResource": {
      "type": "object",
      "description": "Defines the attributes returned when a provider resource is requested from the API.",
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier to identify the resource in the cloud provider account. In certain cases, the resource name may be the same as its ID."
        },
        "name": {
          "type": "string",
          "description": "Name given to this resource in the cloud provider account."
        },
        "description": {
          "type": "string",
          "description": "Description of the resource as specified in the cloud provider account."
        },
        "summary": {
          "type": "string",
          "description": "A summary description of the resource, constructed by the system automatically, to highlight the essential properties of the resource."
        },
        "restricted_to": {
          "type": "object",
          "description": "Defines the restrictions that is placed upon this resource in relation to other provider resources. For example, a subnet resource will specify the network href that it is restricted to be used with and/or a zone href where it is limited to be used within."
        }
      }
    },
    "ProviderResourceCollection": {
      "type": "array",
      "description": "A collection of provider resources of a particular resource type.",
      "items": {
        "$ref": "#/definitions/ProviderResource"
      }
    },
    "Proxy": {
      "description": "Data planes are constructed as a group of proxy servers",
      "allOf": [
        {
          "$ref": "#/definitions/ProxyConfiguration"
        },
        {
          "$ref": "#/definitions/ProxyIdentity"
        },
        {
          "$ref": "#/definitions/ProxyState"
        }
      ]
    },
    "ProxyConfiguration": {
      "type": "object",
      "description": "The configurable attributes of a proxy",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the proxy"
        },
        "public_addresses": {
          "type": "array",
          "description": "The public IP addresses of this proxy",
          "items": {
            "$ref": "#/definitions/Cidr"
          }
        },
        "private_addresses": {
          "type": "array",
          "description": "The private IP addresses of this proxy",
          "items": {
            "$ref": "#/definitions/Cidr"
          }
        },
        "blueprint": {
          "description": "The server blueprint used to create this proxy",
          "$ref": "#/definitions/Blueprint"
        },
        "version": {
          "type": "string",
          "description": "The version of lgbroker that is running on this proxy"
        }
      }
    },
    "ProxyIdentity": {
      "type": "object",
      "description": "Identifier for a proxy",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this proxy",
          "pattern": "^/v2/data-planes/[a-z0-9]+/proxies/[a-z0-9]+$"
        }
      }
    },
    "ProxyState": {
      "type": "object",
      "description": "The state of this proxy",
      "properties": {
        "state": {
          "type": "string",
          "description": "The state of the proxy",
          "enum": [
            "creating",
            "installing",
            "acl_installing",
            "configuring",
            "running",
            "maintenance",
            "replacing",
            "failed",
            "deleting"
          ]
        },
        "created": {
          "description": "The time this proxy was created",
          "$ref": "#/definitions/Timestamp"
        },
        "unreachable_since": {
          "description": "The latest time that this proxy became unreachable",
          "$ref": "#/definitions/Timestamp"
        },
        "reachable_since": {
          "description": "The latest time that this proxy became reachable",
          "$ref": "#/definitions/Timestamp"
        },
        "configured": {
          "description": "The time this proxy was configured",
          "$ref": "#/definitions/Timestamp"
        },
        "replacement_for": {
          "type": "string",
          "description": "The derivative proxy this proxy replaced"
        }
      }
    },
    "Range": {
      "type": "object",
      "required": [
        "from",
        "to",
        "count"
      ],
      "description": "Details for a log archive file.",
      "properties": {
        "from": {
          "$ref": "#/definitions/Timestamp"
        },
        "to": {
          "$ref": "#/definitions/Timestamp"
        },
        "count": {
          "type": "integer",
          "description": "The number of logs in the file."
        },
        "state": {
          "type": "string",
          "enum": [
            "ready",
            "archived",
            "restoring"
          ],
          "description": "The archive state of the file."
        },
        "size": {
          "type": "integer",
          "description": "The size of the file in bytes."
        }
      }
    },
    "ReferrerPatterns": {
      "type": "array",
      "description": "A list of referrer wildcard patterns",
      "items": {
        "description": "A referrer wildcard pattern. Examples: http://example.com/categories/*, example.com/categories/*, /categories/*, example.com",
        "type": "string",
        "minLength": 1,
        "maxLength": 255
      },
      "minItems": 1
    },
    "Report": {
      "description": "A report to track all the resource allocation.",
      "allOf": [
        {
          "$ref": "#/definitions/ReportIdentity"
        },
        {
          "$ref": "#/definitions/ReportState"
        }
      ]
    },
    "ReportIdentity": {
      "description": "Identifier for a report.",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this report.",
          "pattern": "^/v2/reports/[a-z0-9]+$"
        },
        "account": {
          "type": "string",
          "description": "The account who owns this report.",
          "pattern": "^/v2/accounts/[a-z0-9]+$"
        }
      }
    },
    "ReportState": {
      "description": "The current state of a report.",
      "additionalProperties": false,
      "properties": {
        "elements": {
          "description": "Content of the report.",
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "SectionedReport": {
      "type": "object",
      "additionalProperties": false,
      "description": "A report generated multiple times over time is captured in independent sections.",
      "properties": {
        "schema": {
          "type": "string",
          "enum": [
            "sectioned-report"
          ]
        },
        "sections": {
          "type": "array",
          "description": "A collection of the independent sections of the report.",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Report name."
              },
              "href": {
                "type": "string",
                "description": "Report HREF."
              }
            }
          }
        }
      }
    },
    "ApplicationTestReport": {
      "type": "object",
      "description": "A single application test report generated after the test completes.",
      "properties": {
        "href": {
          "type": "string",
          "pattern": "^/v2/reports/test-result$"
        },
        "elements": {
          "type": "array",
          "description": "Test elements.",
          "minItems": 1,
          "maxItems": 1,
          "items": {
            "type": "object",
            "properties": {
              "result": {
                "type": "object",
                "description": "Test result.",
                "properties": {
                  "aggregate_metrics": {
                    "type": "object",
                    "description": "Aggregate test metrics.",
                    "properties": {
                      "request_count": {
                        "type": "integer",
                        "description": "Total number of requests sent during the test."
                      },
                      "average_throughput": {
                        "type": "number",
                        "description": "Average number of request sent per second."
                      },
                      "average_ttfb": {
                        "type": "number",
                        "description": "Average time it took the application to respond, in milliseconds."
                      },
                      "response_counts": {
                        "type": "array",
                        "description": "The response status codes returned by the application in two forms: aggregated and grouped by URL.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "code": {
                              "type": "integer",
                              "description": "HTTP request return code."
                            },
                            "count": {
                              "type": "integer",
                              "description": "HTTP request count."
                            },
                            "url_grouping": {
                              "type": "array",
                              "description": "URL groups, used to run this test.",
                              "items": {
                                "type": "object",
                                "description": "URL group, used to run this test.",
                                "properties": {
                                  "url": {
                                    "type": "string",
                                    "description": "Test URL."
                                  },
                                  "count": {
                                    "type": "integer",
                                    "description": "The amount of URLs in a group."
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "succeeded",
                      "running",
                      "failed"
                    ],
                    "description": "Test run status."
                  },
                  "duration": {
                    "type": "integer",
                    "description": "The duration the application test took to run, in seconds."
                  },
                  "virtual_users": {
                    "type": "integer",
                    "description": "A virtual user is a unique visitor to the application."
                  },
                  "session_templates": {
                    "type": "array",
                    "description": "Sessions simulate the browsing behavior of a unique visitor to the application.",
                    "items": {
                      "type": "object",
                      "description": "Test session template.",
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "Template name."
                        },
                        "session_id": {
                          "type": "string",
                          "description": "Session ID."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "succeeded",
                            "running",
                            "failed"
                          ],
                          "description": "Test run status."
                        },
                        "run_count": {
                          "type": "integer",
                          "description": "Test run count."
                        },
                        "failure_count": {
                          "type": "integer",
                          "description": "Test failure count."
                        },
                        "request_templates": {
                          "type": "array",
                          "description": "An array of request templates.",
                          "items": {
                            "type": "object",
                            "description": "Request template.",
                            "properties": {
                              "name": {
                                "type": "string",
                                "description": "Request name."
                              },
                              "url": {
                                "type": "string",
                                "description": "Request URL."
                              },
                              "metrics": {
                                "type": "object",
                                "description": "Test run metrics.",
                                "properties": {
                                  "request_count": {
                                    "type": "integer",
                                    "description": "Total number of requests sent during the test."
                                  },
                                  "average_ttfb": {
                                    "type": "number",
                                    "description": "Average time it took the application to respond, in milliseconds."
                                  },
                                  "response_counts": {
                                    "type": "array",
                                    "description": "An array of response counts.",
                                    "items": {
                                      "type": "object",
                                      "description": "Response count.",
                                      "properties": {
                                        "code": {
                                          "type": "integer",
                                          "description": "HTTP request return code."
                                        },
                                        "count": {
                                          "type": "integer",
                                          "description": "HTTP request count."
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        "response_counts": {
                          "type": "array",
                          "description": "An array of response counts.",
                          "items": {
                            "type": "object",
                            "description": "Response count.",
                            "properties": {
                              "code": {
                                "type": "integer",
                                "description": "HTTP request return code."
                              },
                              "count": {
                                "type": "integer",
                                "description": "HTTP request count."
                              }
                            }
                          }
                        }
                      }
                    }
                  },
                  "ramp_up": {
                    "type": "array",
                    "description": "To prevent overloading application servers, application testing loads are increased over time.",
                    "items": {
                      "type": "object",
                      "description": "Test ramp up statistics.",
                      "properties": {
                        "virtual_users": {
                          "type": "integer",
                          "description": "A virtual user is a unique visitor to the application."
                        },
                        "started": {
                          "type": "string",
                          "description": "Test start time."
                        },
                        "finished": {
                          "type": "string",
                          "description": "Test finish time."
                        },
                        "metrics": {
                          "type": "object",
                          "description": "Test ramp up metrics.",
                          "properties": {
                            "request_count": {
                              "type": "integer",
                              "description": "Total number of requests sent during the test."
                            },
                            "average_throughput": {
                              "type": "number",
                              "description": "Average number of request sent per second."
                            },
                            "average_ttfb": {
                              "type": "number",
                              "description": "Average time it took the application to respond, in milliseconds."
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "account_name": {
                "type": "string",
                "description": "Account name that was running this test."
              },
              "charges": {
                "type": "object",
                "description": "Any overage charge generated as result of application test usage in excess to the account's plan."
              },
              "last_updated_test_configuration": {
                "type": "string",
                "description": "Time, when test configuration was last updated."
              },
              "name": {
                "type": "string",
                "description": "Test name."
              }
            }
          }
        },
        "updated": {
          "type": "string",
          "description": "Test update time."
        },
        "account": {
          "$ref": "#/definitions/AccountHref",
          "description": "The account that generated this report."
        },
        "section": {
          "type": "string",
          "description": "Section ID."
        }
      }
    },
    "Retention": {
      "type": "object",
      "description": "Log retention details.",
      "properties": {
        "online_age": {
          "type": "integer",
          "description": "Days logs will be retained online."
        }
      }
    },
    "Resource": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ResourceReference"
        },
        {
          "required": [
            "id"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "The id of the resource."
            }
          }
        }
      ]
    },
    "ResourceReference": {
      "type": "object",
      "required": [
        "href"
      ],
      "properties": {
        "href": {
          "type": "string",
          "description": "The endpoint for the resource."
        }
      }
    },
    "Role": {
      "description": "A generic role granted to users of an account",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/RoleConfiguration"
        },
        {
          "$ref": "#/definitions/RoleIdentity"
        },
        {
          "$ref": "#/definitions/RoleState"
        }
      ]
    },
    "RoleConfiguration": {
      "description": "The configurable parts of a role",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the role",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Description of the role",
          "minLength": 0,
          "maxLength": 100
        },
        "maximum_auth_age_secs": {
          "description": "Specifies the maximum age that an authentication may assume this role",
          "$ref": "#/definitions/PositiveInteger"
        },
        "mfa_required": {
          "type": "boolean",
          "description": "Determines if this role requires multi-factor authentication"
        },
        "inheritable": {
          "type": "boolean",
          "description": "Determines if this role is inheritable by the subaccounts of the account in which it was created"
        },
        "permissions": {
          "type": "array",
          "description": "Webscale API permissions",
          "items": {
            "$ref": "#/definitions/Permissions"
          }
        }
      }
    },
    "RoleConfigurationPost": {
      "type": "object",
      "required": [
        "name"
      ],
      "$ref": "#/definitions/RoleConfiguration"
    },
    "RoleIdentity": {
      "description": "Identifier for a role",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this role",
          "pattern": "^/v2/accounts/[a-z0-9]+/roles/[a-z0-9]+$"
        }
      }
    },
    "RoleInvitation": {
      "description": "A invitation to a user role",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/RoleInvitationConfiguration"
        },
        {
          "$ref": "#/definitions/RoleInvitationIdentity"
        },
        {
          "$ref": "#/definitions/RoleInvitationState"
        },
        {
          "$ref": "#/definitions/RoleInvitationInitializer"
        }
      ]
    },
    "RoleInvitationConfiguration": {
      "description": "The configurable parts of a role invitation",
      "additionalProperties": false,
      "properties": {
        "state": {
          "type": "string",
          "description": "A reference to this role",
          "enum": [
            "queued",
            "accepted",
            "sent",
            "declined"
          ]
        }
      }
    },
    "RoleInvitationPost": {
      "type": "object",
      "required": [
        "user_email",
        "role"
      ],
      "$ref": "#/definitions/RoleInvitationInitializer"
    },
    "RoleInvitationInitializer": {
      "description": "The current state of a role invitation",
      "additionalProperties": false,
      "properties": {
        "user_email": {
          "description": "Email of the user",
          "$ref": "#/definitions/Email"
        },
        "role": {
          "type": "string",
          "description": "A reference to this role",
          "pattern": "^/v2/accounts/[a-z0-9]+/roles/[a-z0-9]+$"
        }
      }
    },
    "RoleInvitationState": {
      "description": "The current state of a role invitation",
      "additionalProperties": false,
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "sent": {
          "$ref": "#/definitions/Timestamp"
        },
        "granted_by": {
          "type": "string",
          "description": "The user that sent the invitation",
          "pattern": "^/v2/users/[a-z0-9]+$"
        }
      }
    },
    "RoleInvitationIdentity": {
      "description": "Identifier for a role invitation",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this role",
          "pattern": "^/v2/accounts/[a-z0-9]+/invitations/[a-z0-9]+$"
        }
      }
    },
    "RoleState": {
      "description": "The current state of a role",
      "additionalProperties": false,
      "properties": {
        "created": {
          "$ref": "#/definitions/Timestamp"
        },
        "updated": {
          "$ref": "#/definitions/Timestamp"
        }
      }
    },
    "SearchParameters": {
      "description": "Parameter object for the search task",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "search"
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "required": [
            "pattern"
          ],
          "properties": {
            "pattern": {
              "type": "string",
              "description": "A wildcard pattern to search for"
            },
            "limit": {
              "type": "integer",
              "description": "The maximum number of results to be returned. If omitted, then all results are returned"
            }
          },
          "additionalProperties": false
        }
      }
    },
    "SearchResult": {
      "description": "Results of a search task",
      "properties": {
        "matches": {
          "type": "array",
          "items": {
            "description": "A matched object",
            "properties": {
              "account": {
                "description": "An account object that contains a href and all account attributes that were searched",
                "$ref": "#/definitions/Account"
              },
              "subject": {
                "type": "object",
                "description": "A matched object containing at a minimum an \"href\" attribute and any attributes that were searched"
              }
            }
          }
        }
      }
    },
    "Substitute": {
      "type": "object",
      "required": [
        "contains",
        "replace"
      ],
      "properties": {
        "contains": {
          "type": "string",
          "description": "Case sensitive text in URL or query.",
          "minLength": 1,
          "maxLength": 255
        },
        "replace": {
          "type": "string",
          "description": "Text that will replace the case sensitive input provided by user.",
          "minLength": 1,
          "maxLength": 255
        }
      }
    },
    "Substitutes": {
      "type": "array",
      "description": "Array of substitutes",
      "items": {
        "$ref": "#/definitions/Substitute",
        "minItems": 1
      }
    },
    "TaskEnterMaintenance": {
      "description": "Starts application maintenance",
      "type": "object",
      "required": [
        "type",
        "target"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "enter_maintenance"
          ]
        },
        "target": {
          "description": "Reference to the application for which maintenance is to be started",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "An application href",
              "pattern": "^/v2/applications/[a-z0-9]+$"
            }
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Optional parameters",
          "properties": {
            "maximum_duration": {
              "type": "integer"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskExitMaintenance": {
      "description": "Exits application from maintenance",
      "type": "object",
      "required": [
        "type",
        "target"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "exit_maintenance"
          ]
        },
        "target": {
          "description": "Reference to the application for which maintenance is to be stopped",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference",
              "pattern": "^/v2/applications/[a-z0-9]+$"
            }
          ]
        },
        "parameters": {
          "type": "object",
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskGenerateOriginCertificate": {
      "description": "Generate certificate for application servers",
      "type": "object",
      "required": [
        "parameters",
        "target",
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "generate-origin-certificate"
          ]
        },
        "target": {
          "description": "Reference to the application for which certificate is to be generated",
          "$ref": "#/definitions/ApplicationHref"
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "required": [
            "key"
          ],
          "properties": {
            "key": {
              "description": "A PEM encoded RSA key",
              "type": "string"
            },
            "hostnames": {
              "description": "A list of hostnames those needs to be included in the certificate",
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^(?:[a-zA-Z0-9*][a-zA-Z0-9*\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$"
              },
              "minItems": 1
            },
            "expiry": {
              "$ref": "#/definitions/Timestamp",
              "description": "The time at which the certificate expires"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskInvalidateCache": {
      "description": "Invalidate Cache for given application",
      "type": "object",
      "required": [
        "type",
        "target",
        "parameters"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "invalidate-cache"
          ]
        },
        "target": {
          "description": "Endpoint for the target of the task. Only required for tasks targeting resources.",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference"
            }
          ]
        },
        "parameters": {
          "type": "object",
          "description": " Additional parameters specific to the task type.",
          "required": [
            "urls"
          ],
          "properties": {
            "urls": {
              "description": "A list of URLs to be invalidated",
              "type": "array",
              "items": {
                "$ref": "#/definitions/InvalidateCacheUrl"
              },
              "minItems": 1
            },
            "tags": {
              "description": "A list of tags to be invalidated",
              "type": "array",
              "items": {
                "$ref": "#/definitions/TagName"
              },
              "minItems": 1
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskOauth2Authorize": {
      "description": "Complete an Oauth2 authorization",
      "type": "object",
      "required": [
        "type",
        "parameters"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "oauth2-authorize"
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "properties": {
            "code": {
              "type": "string"
            },
            "realm_id": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskRunAction": {
      "description": "Runs the target application",
      "type": "object",
      "required": [
        "type",
        "target",
        "parameters"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "run-action"
          ]
        },
        "target": {
          "description": "A reference to an application for which the action is run",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference",
              "pattern": "^/v2/applications/[a-z0-9]+$"
            }
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "properties": {
            "id": {
              "type": "string",
              "description": "The identifier of the action to run"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "TaskStart": {
      "description": "Starts a target application",
      "type": "object",
      "required": [
        "type",
        "target"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "start"
          ]
        },
        "target": {
          "description": "A reference to the application to start",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference",
              "pattern": "^/v2/applications/[a-z0-9]+$"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "TaskStop": {
      "description": "Stops a target application",
      "type": "object",
      "required": [
        "type",
        "target"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "stop"
          ]
        },
        "target": {
          "description": "A reference to the application to stop",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference",
              "pattern": "^/v2/applications/[a-z0-9]+$"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "TaskValidateTLS": {
      "description": "Validates TLS for target application",
      "type": "object",
      "required": [
        "type",
        "parameters"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "validate_tls"
          ]
        },
        "parameters": {
          "type": "object",
          "description": "Required parameters",
          "properties": {
            "tls_configuration": {
              "type": "object"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "Roles": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "A role name",
        "minLength": 1,
        "pattern": "^[a-z-]+$"
      }
    },
    "ScalingCondition": {
      "type": "object",
      "required": [
        "series_name",
        "operator",
        "value",
        "duration",
        "display_unit"
      ],
      "properties": {
        "series_name": {
          "$ref": "#/definitions/ScalingSeriesName",
          "description": "Parameter to monitor to determine scaling in or out of servers."
        },
        "operator": {
          "$ref": "#/definitions/ScalingOperator",
          "description": "Operator to determine scaling condition."
        },
        "value": {
          "type": "number",
          "description": "Threshold value to trigger scaling in or out of servers."
        },
        "duration": {
          "$ref": "#/definitions/Duration",
          "description": "Duration for which the scaling condition has to be true for the scaling to kick in."
        },
        "display_unit": {
          "$ref": "#/definitions/DurationDisplayUnit"
        }
      }
    },
    "ScalingOperator": {
      "type": "string",
      "description": "Operator to determine scaling condition.",
      "enum": [
        "has_been_greater_than",
        "will_be_greater_than",
        "has_been_less_than",
        "will_be_less_than"
      ]
    },
    "ScalingSeriesName": {
      "type": "string",
      "description": "Name identifying the scaling condition type.",
      "enum": [
        "cpu_percent",
        "iowait_percent",
        "kilobytes_per_second",
        "loadavg_norm",
        "memory_used_percent",
        "requests_per_second"
      ]
    },
    "Script": {
      "type": "string",
      "description": "Url associated with a third-party script",
      "maxLength": 760,
      "pattern": "^[a-zA-Z0-9._(\\|\")-~!$&'()*+,;=:@/%\" \"]*$"
    },
    "Secret": {
      "type": "object",
      "required": [
        "description",
        "href",
        "mime_type"
      ],
      "properties": {
        "description": {
          "$ref": "#/definitions/SecretDescription"
        },
        "href": {
          "$ref": "#/definitions/SecretHref"
        },
        "mime_type": {
          "$ref": "#/definitions/SecretMimeType"
        }
      },
      "additionalProperties": false
    },
    "SecretArray": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Secret"
      }
    },
    "SecretContent": {
      "type": "string",
      "description": "The contents of the secret."
    },
    "SecretDescription": {
      "type": "string",
      "description": "Description of the resource."
    },
    "SecretHref": {
      "type": "string",
      "pattern": "^\\/v2\\/secrets\\/[a-z0-9]+$",
      "description": "The endpoint for the secret resource."
    },
    "SecretMimeType": {
      "type": "string",
      "description": "The mime_type of the secret format.",
      "enum": [
        "application/x-hotp-secret",
        "application/x-pem-file",
        "application/json"
      ]
    },
    "SecretPost": {
      "required": [
        "content",
        "mime_type"
      ],
      "properties": {
        "content": {
          "$ref": "#/definitions/SecretContent"
        },
        "description": {
          "$ref": "#/definitions/SecretDescription"
        },
        "mime_type": {
          "$ref": "#/definitions/SecretMimeType"
        }
      },
      "additionalProperties": false
    },
    "SectionedReportHref": {
      "type": "string",
      "pattern": "^\\/v2\\/reports\\/[A-Za-z0-9-]+\\/sections\\/[A-Za-z0-9-:]+$",
      "description": "The endpoint resource identifier for a sectioned report"
    },
    "SecurityGroupHref": {
      "type": "string",
      "pattern": "^\\/v2\\/providers\\/[a-z0-9]+((\\/regions\\/[a-zA-Z0-9-_.]+)|(\\/resource-groups\\/[a-zA-Z0-9-_.]+))?\\/security-groups\\/[a-zA-Z0-9-_]+$",
      "description": "The endpoint resource identifier for the security group, must be a URL encoded string."
    },
    "Server": {
      "type": "object",
      "required": [
        "public_address"
      ],
      "properties": {
        "public_address": {
          "$ref": "#/definitions/Address",
          "description": "Public address of the server."
        }
      }
    },
    "ServerGroupHref": {
      "type": "string",
      "pattern": "^\\/v2\\/providers\\/[a-z0-9]+\\/datacenters\\/[a-zA-Z0-9]+\\/server-groups\\/[a-zA-Z0-9-_]+$",
      "description": "The endpoint resource identifier for the server group, must be a URL encoded string. Only valid for CenturyLink provider."
    },
    "ServerMeasurement": {
      "type": "object",
      "description": "Measurements of resource usage of a server for a particular interval",
      "required": [
        "time",
        "duration"
      ],
      "properties": {
        "time": {
          "$ref": "#/definitions/Timestamp",
          "description": "Time at the end of the interval for which the measurements are made. It is expected that systems will synchronize with an accurate external time source to ensure that the correct measurements can be used to make scaling decisions"
        },
        "cpu_percent": {
          "type": "number",
          "description": "Percentage of CPU utilization. This is expected to be provided by all servers"
        },
        "loadavg_norm": {
          "type": "array",
          "description": "15, 5 and 1 min load averages per cpu. This is expected to be provided by UNIX-based servers",
          "items": {
            "type": "number"
          }
        },
        "iowait_percent": {
          "type": "number",
          "description": "Percentage of time spent by ready tasks waiting for I/O operations to complete. This is expected to be provided by UNIX-based servers"
        },
        "memory_used_percent": {
          "type": "number",
          "description": "Average percentage of memory used. This is expected to be provided by all servers"
        },
        "avg_processor_queue_length": {
          "type": "number",
          "description": "Average of processor queue length. This is expected to be provided by Windows-based servers"
        },
        "avg_disk_queue_length": {
          "type": "number",
          "description": "Average of disk queue length. This is expected to be provided by Windows-based servers"
        },
        "duration": {
          "type": "integer",
          "description": "The size of the interval ending at 'time' to which the metrics apply. Providers of metrics are expected to periodically supply metrics in adjacent intervals with identical duration, preferably every 20 seconds"
        }
      },
      "additionalProperties": false
    },
    "ServerMeasurements": {
      "type": "array",
      "description": "Measurements of resource usage of a server",
      "items": {
        "$ref": "#/definitions/ServerMeasurement"
      }
    },
    "ServerNetwork": {
      "type": "object",
      "required": [
        "name",
        "external_ipv4_address",
        "ipv4_address"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the network."
        },
        "external_ipv4_address": {
          "type": "string",
          "format": "ipv4",
          "description": "The external ipv4 address of the cluster server."
        },
        "ipv4_address": {
          "type": "string",
          "format": "ipv4",
          "description": "The ipv4 address of the cluster server."
        }
      }
    },
    "ServerPatch": {
      "type": "object",
      "description": "Specifies attributes of a server to update",
      "properties": {
        "state": {
          "type": "string",
          "description": "The state to update the server to. Only servers that are currently in the 'active' state can be updated. Updating a server to the 'leaving' state causes it to leave the cluster as though it were being scaled in. Updating the server to the 'failed' state causes a replacement server to be created for it and the server to be destroyed once a replacement becomes active. If updating a server to 'leaving' would make the cluster smaller than its 'minimum_size' attribute, the operation will fail. Once a 'failed' server is successfully replaced, the server will be destroyed or detached based on the clusters 'failed_server_disposition' attribute.",
          "enum": [
            "leaving",
            "failed"
          ]
        }
      }
    },
    "ServersHostname": {
      "description": "A fully qualified domain name (FQD) whose addresses are used to set the backend servers to which traffic should be sent",
      "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$",
      "type": "string"
    },
    "ServicesHref": {
      "type": "string",
      "pattern": "^\\/v2\\/services\\/[a-zA-Z0-9\\-]+(\\/[a-zA-Z0-9\\-]+\\/[a-zA-Z0-9\\-\\.]+)+$",
      "description": "The endpoint for a resource accessible via services available for this account."
    },
    "ServiceUser": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ServiceUserIdentity"
        },
        {
          "$ref": "#/definitions/ServiceUserConfiguration"
        }
      ]
    },
    "ServiceUserIdentity": {
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this service user"
        },
        "email": {
          "description": "Email of the user",
          "$ref": "#/definitions/Email"
        },
        "account": {
          "description": "A reference to the account to which the service user belongs to.",
          "$ref": "#/definitions/AccountHref"
        },
        "access_keys": {
          "type": "array",
          "description": "An array of access keys",
          "items": {
            "$ref": "#/definitions/AccessKey"
          }
        }
      },
      "additionalProperties": false
    },
    "ServiceUserConfiguration": {
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the user",
          "maxLength": 32
        },
        "description": {
          "type": "string",
          "description": "A description of the service user",
          "maxLength": 255
        }
      },
      "additionalProperties": false
    },
    "SettingName": {
      "type": "string",
      "description": "The name of a configuration setting.",
      "enum": [
        "blacklist",
        "whitelist"
      ]
    },
    "Settings": {
      "type": "object",
      "properties": {
        "whitelist": {
          "$ref": "#/definitions/Whitelist"
        },
        "blacklist": {
          "$ref": "#/definitions/Blacklist"
        }
      }
    },
    "SignupPost": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/SignupWriteOnly"
        }
      ]
    },
    "SignupsResponse": {
      "type": "object",
      "required": [
        "login_url",
        "credentials"
      ],
      "properties": {
        "login_url": {
          "type": "string",
          "format": "uri",
          "description": "A URL where the newly signed up user can login."
        },
        "credentials": {
          "type": "object",
          "required": [
            "token"
          ],
          "properties": {
            "token": {
              "type": "string",
              "description": "Authorization api token for the newly created user."
            }
          }
        },
        "task": {
          "type": "object",
          "description": "A task may be created to handle long running signup related work.",
          "$ref": "#/definitions/Task"
        }
      }
    },
    "SignupWriteOnly": {
      "type": "object",
      "required": [
        "account_name",
        "email",
        "password"
      ],
      "properties": {
        "account_name": {
          "type": "string",
          "description": "The name of the new account.",
          "minLength": 3,
          "maxLength": 255
        },
        "full_name": {
          "type": "string",
          "description": "The user's full name.",
          "minLength": 1,
          "maxLength": 255
        },
        "phone": {
          "type": "string",
          "description": "The user's phone number.",
          "minLength": 1,
          "maxLength": 15
        },
        "email": {
          "type": "string",
          "description": "The user's email address.",
          "pattern": "^.+@.+\\..+$",
          "minLength": 1,
          "maxLength": 255
        },
        "password": {
          "type": "string",
          "description": "The password for the new account.",
          "pattern": "(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])",
          "minLength": 8,
          "maxLength": 255
        },
        "hostname": {
          "type": "string",
          "description": "The hostname of the application to create.",
          "format": "uri"
        },
        "plan": {
          "type": "string",
          "description": "The plan for the application."
        }
      }
    },
    "SiteCache": {
      "type": "object",
      "description": "A configuration for Dynamic Site Cache",
      "required": [
        "enabled",
        "rules"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "When false, site cache will be turned off"
        },
        "rules": {
          "type": "array",
          "description": "A sequence of rules for caching. Each enabled rule is evaluated in sequence, and the first whose conditions match a request will apply to that request. If none match, then no caching will be done",
          "items": {
            "$ref": "#/definitions/SiteCacheRule"
          },
          "minItems": 1,
          "uniqueItems": true
        }
      },
      "additionalProperties": false
    },
    "SiteCacheCondition": {
      "description": "A condition used to match requests for Dynamic Site Cache",
      "oneOf": [
        {
          "$ref": "#/definitions/ConditionAddressInSet"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsNotThreat"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsNotWhitelisted"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsThreat"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsWhitelisted"
        },
        {
          "$ref": "#/definitions/ConditionAddressNotInSet"
        },
        {
          "$ref": "#/definitions/ConditionAuthCookieIsNotSet"
        },
        {
          "$ref": "#/definitions/ConditionAuthCookieIsSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieIsNotSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieIsSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieValueDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionCookieValueMatches"
        },
        {
          "$ref": "#/definitions/ConditionCountryIs"
        },
        {
          "$ref": "#/definitions/ConditionCountryIsNot"
        },
        {
          "$ref": "#/definitions/ConditionRandom"
        },
        {
          "$ref": "#/definitions/ConditionReferrerDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionReferrerIsDefined"
        },
        {
          "$ref": "#/definitions/ConditionReferrerIsNotDefined"
        },
        {
          "$ref": "#/definitions/ConditionReferrerMatches"
        },
        {
          "$ref": "#/definitions/ConditionUrlDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionUrlMatches"
        },
        {
          "$ref": "#/definitions/ConditionUserAgentDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionUserAgentMatches"
        },
        {
          "$ref": "#/definitions/ConditionHeaderValueMatches"
        },
        {
          "$ref": "#/definitions/ConditionHeaderValueDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionHeadersMatch"
        },
        {
          "$ref": "#/definitions/ConditionHeadersNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionMethodIs"
        },
        {
          "$ref": "#/definitions/ConditionMethodIsNot"
        },
        {
          "$ref": "#/definitions/ConditionIsCrawler"
        }
      ]
    },
    "SiteCacheRule": {
      "type": "object",
      "description": "A rule for caching requests. All of the conditions for the rule must evaluate to true in order for the rule to be used.",
      "required": [
        "conditions",
        "enabled",
        "ttl_sec"
      ],
      "properties": {
        "conditions": {
          "type": "array",
          "description": "An array of conditions. When empty, all requests match",
          "items": {
            "$ref": "#/definitions/SiteCacheCondition"
          }
        },
        "enabled": {
          "type": "boolean",
          "description": "When false, this rule will not be used"
        },
        "ttl_sec": {
          "type": "number",
          "description": "The amount of time in seconds that a cached item is retained after it is initially stored",
          "minimum": 10
        },
        "key": {
          "oneOf": [
            {
              "type": "null",
              "description": "The default key, including browser, host, path, query and cookie."
            },
            {
              "$ref": "#/definitions/CacheKeyConfiguration"
            }
          ]
        },
        "tags": {
          "description": "A CacheTag",
          "$ref": "#/definitions/CacheTagConfiguration"
        }
      },
      "additionalProperties": false
    },
    "StatusElement": {
      "description": "An element that describes some element of system status",
      "oneOf": [
        {
          "$ref": "#/definitions/StatusIncident"
        },
        {
          "$ref": "#/definitions/StatusTimeline"
        },
        {
          "$ref": "#/definitions/StatusVersions"
        }
      ]
    },
    "StatusIncident": {
      "type": "object",
      "description": "An incident, in a status context",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "incident"
          ]
        },
        "element": {
          "description": "An incident",
          "$ref": "#/definitions/Incident"
        }
      }
    },
    "StatusTimeline": {
      "description": "A sequence of status elements arranged by time",
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "timeline"
          ]
        },
        "element": {
          "description": "A sequence of timeline entries, in descending time order",
          "type": "array",
          "items": {
            "$ref": "#/definitions/StatusTimelineEntry"
          }
        }
      }
    },
    "StatusTimelineEntry": {
      "type": "object",
      "description": "An entry in a timeline, placed at a time and containing some element",
      "properties": {
        "time": {
          "$ref": "#/definitions/Timestamp"
        },
        "entry": {
          "$ref": "#/definitions/StatusElement"
        }
      }
    },
    "StatusVersions": {
      "type": "object",
      "description": "Version details for components of the Webscale service.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "versions"
          ]
        },
        "element": {
          "description": "Version element containing version details for components within the Webscale service.",
          "type": "object",
          "properties": {
            "components": {
              "type": "array",
              "description": "Version details for components within the Webscale service.",
              "items": {
                "type": "object",
                "description": "Version details of a component within the Webscale service.",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the Webscale service component."
                  },
                  "version": {
                    "type": "string",
                    "description": "The version of the Webscale service component."
                  }
                }
              }
            }
          }
        }
      }
    },
    "Subscription": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/SubscriptionReadOnly"
        },
        {
          "$ref": "#/definitions/SubscriptionReadWrite"
        }
      ]
    },
    "SubscriptionReadOnly": {
      "type": "object",
      "required": [
        "id",
        "state"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The id of the resource."
        },
        "state": {
          "type": "string",
          "description": "The state of the subscription.",
          "enum": [
            "active",
            "inactive"
          ]
        }
      }
    },
    "SubscriptionReadWrite": {
      "type": "object",
      "required": [
        "plan"
      ],
      "properties": {
        "plan": {
          "type": "object",
          "description": "The plan that is being subscribed to.",
          "$ref": "#/definitions/PlanReadWrite"
        }
      }
    },
    "Success": {
      "type": "object",
      "required": [
        "success"
      ],
      "properties": {
        "success": {
          "type": "string",
          "description": "success"
        }
      }
    },
    "SuspendLimit": {
      "type": "integer",
      "description": "Maximum number of requests that can be put in the suspend queue of a load balancer before the oldest requests are failed. This attribute may only be set by system administrators",
      "minimum": 1
    },
    "Task": {
      "type": "object",
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to the task"
        },
        "type": {
          "type": "string",
          "description": "The type of task"
        },
        "target": {
          "type": "string",
          "description": "An object on which a referencing task operates"
        },
        "parameters": {
          "type": "object",
          "description": "The parameters used as input to a task"
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "Time that the task was created."
        },
        "started": {
          "type": "string",
          "format": "date-time",
          "description": "Time that the task was started.  This field will be null if the task has not started."
        },
        "completed": {
          "type": "string",
          "format": "date-time",
          "description": "Time at which processing for a task completed, or null if not yet completed."
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "description": "Time at which the task was last updated."
        },
        "state": {
          "type": "string",
          "description": "The current state of the task.  success and failed are final states.",
          "enum": [
            "pending",
            "running",
            "success",
            "failed"
          ]
        },
        "description": {
          "type": "string",
          "description": "A description of the task"
        },
        "message": {
          "type": "string",
          "description": "This field may contain a message regarding the current state of the task or it may be null."
        },
        "result": {
          "description": "The result of a task.  Type is an object dependent on the task.  Will not be set for tasks that do not compute results.",
          "oneOf": [
            {
              "type": "object"
            },
            {
              "$ref": "#/definitions/SearchResult"
            }
          ]
        }
      }
    },
    "TaskPost": {
      "description": "Configuration for a task to be created",
      "oneOf": [
        {
          "$ref": "#/definitions/TaskEnterMaintenance"
        },
        {
          "$ref": "#/definitions/TaskExitMaintenance"
        },
        {
          "$ref": "#/definitions/TaskGenerateOriginCertificate"
        },
        {
          "$ref": "#/definitions/TaskInvalidateCache"
        },
        {
          "$ref": "#/definitions/TaskOauth2Authorize"
        },
        {
          "$ref": "#/definitions/TaskRunAction"
        },
        {
          "$ref": "#/definitions/TaskStart"
        },
        {
          "$ref": "#/definitions/TaskStop"
        },
        {
          "$ref": "#/definitions/TaskValidateTLS"
        },
        {
          "$ref": "#/definitions/SearchParameters"
        },
        {
          "$ref": "#/definitions/PrepareForDownload"
        }
      ]
    },
    "Template": {
      "description": "A template contains contains markdown that can be formatted to create messages for the alert or event.",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/TemplateConfiguration"
        },
        {
          "$ref": "#/definitions/TemplateIdentity"
        }
      ]
    },
    "TemplateConfiguration": {
      "description": "The configurable attributes of a template",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of the template",
          "enum": [
            "alert",
            "event"
          ]
        },
        "name": {
          "type": "string",
          "description": "Name of the template",
          "minLength": 1,
          "pattern": "^[a-z0-9-_]+$"
        },
        "description": {
          "type": "string",
          "description": "Description of the template",
          "minimum": 0,
          "maxLength": 100
        },
        "content": {
          "type": "string",
          "description": "Content of the template",
          "minLength": 1
        }
      }
    },
    "TemplateIdentity": {
      "description": "Identifier for a template",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this template",
          "pattern": "^/v2/templates/[a-z0-9]+$"
        }
      }
    },
    "Timestamp": {
      "type": "string",
      "description": "An iso8601 formatted timestamp",
      "pattern": "^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]{0,6})?(?:Z|[+-][01][0-9]:[0-5][0-9])$"
    },
    "TlsConfiguration": {
      "type": "object",
      "properties": {
        "private_key": {
          "description": "A reference to a secret containing a private key",
          "oneOf": [
            {
              "$ref": "#/definitions/ResourceReference"
            },
            {
              "type": "string",
              "description": "A resource reference"
            }
          ]
        },
        "private_keys": {
          "description": "A reference to an array of secrets containing private keys",
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/ResourceReference"
              },
              {
                "$ref": "#/definitions/SecretHref"
              }
            ]
          }
        },
        "certificate_chain": {
          "type": "string",
          "description": "The signed certificate followed by any intermediate certificate chain.",
          "minLength": 1
        },
        "enable_auto_tls": {
          "type": "boolean",
          "description": "When enabled Auto TLS will configure your application to automatically obtain and renew certificates from Let's Encrypt.",
          "default": false
        },
        "enable_force_tls": {
          "type": "boolean",
          "description": "Force HTTP traffic to be routed over HTTPS for the application.",
          "default": false
        },
        "enable_tls_offloading": {
          "type": "boolean",
          "description": "When enabled the ADC tier will act as a TLS termination proxy, decrypting incoming HTTPS traffic and routing the unencrypted traffic to the application tier over HTTP.  Response from the application tier are encrypted at the ADC tier and routed over HTTPS back to the client.",
          "default": false
        },
        "enable_server_validation": {
          "type": "boolean",
          "description": "Enable validation of the TLS certificate chain against the application servers.",
          "default": true
        },
        "tolerate_invalid_chain": {
          "type": "boolean",
          "description": "Tolerate certificate chain errors in certificates presented by the application servers.",
          "default": false
        },
        "versions": {
          "type": "array",
          "description": "The versions of TLS that will be accepted for this application",
          "items": {
            "$ref": "#/definitions/TlsVersion"
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "covered_aliases": {
          "type": "array",
          "description": "Covered aliases by tls configuration for this application",
          "items": {
            "$ref": "#/definitions/CoveredAlias"
          }
        }
      }
    },
    "TlsConfigurationForValidator": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "private_key": {
          "oneOf": [
            {
              "type": "object",
              "required": [
                "key"
              ],
              "additionalProperties": false,
              "properties": {
                "key": {
                  "type": "string",
                  "minLength": 1
                }
              }
            },
            {
              "type": "object",
              "required": [
                "href"
              ],
              "additionalProperties": false,
              "properties": {
                "href": {
                  "type": "string",
                  "pattern": "^\\/v2\\/secrets\\/[a-z0-9]+$"
                }
              }
            }
          ]
        },
        "private_keys": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "$ref": "#/definitions/ResourceReference"
              },
              {
                "type": "object",
                "required": [
                  "key"
                ],
                "additionalProperties": false,
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              }
            ]
          }
        },
        "certificate_chain": {
          "type": "string",
          "description": "The signed certificate followed by any intermediate certificate chain.",
          "minLength": 1
        }
      }
    },
    "TlsVersion": {
      "type": "string",
      "description": "Names of the versions of Transport Layer Security (TLS)",
      "enum": [
        "TlsV1.1",
        "TlsV1.2"
      ]
    },
    "CoveredAlias": {
      "type": "object",
      "description": "Certificate information for covered alias",
      "required": [
        "name",
        "not_after",
        "trusted"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "Covered alias name",
          "pattern": "^([a-zA-Z0-9][a-zA-Z0-9\\-_]*\\.){1,}[a-zA-Z0-9-]{2,}$",
          "type": "string"
        },
        "not_after": {
          "$ref": "#/definitions/Timestamp",
          "description": "Certificate to be used not after"
        },
        "trusted": {
          "description": "Certificate is trusted or not",
          "type": "boolean"
        }
      }
    },
    "Type": {
      "description": "A log field type.",
      "type": "object",
      "required": [
        "name"
      ],
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "Name of the type",
          "type": "string",
          "enum": [
            "address",
            "array",
            "byte-count",
            "correlation-id",
            "country-code",
            "duration",
            "enum",
            "host",
            "label",
            "path",
            "port",
            "query",
            "script",
            "status-code",
            "string",
            "timestamp",
            "url",
            "url-map-id",
            "web-control-id"
          ]
        },
        "element_type": {
          "description": "When a Field is of array type, element_type defines the type of the elements within the array.",
          "$ref": "#/definitions/Type"
        },
        "values": {
          "description": "When a Field is of enum type, the enum's values will be defined.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/EnumValue"
          }
        }
      }
    },
    "UrlMap": {
      "description": "A URL map contains mappings from source URL to destination URL.",
      "additionalProperties": false,
      "allOf": [
        {
          "$ref": "#/definitions/UrlMapConfiguration"
        },
        {
          "$ref": "#/definitions/UrlMapIdentity"
        },
        {
          "$ref": "#/definitions/UrlMapState"
        }
      ]
    },
    "UrlMapConfiguration": {
      "description": "The configurable attributes of a URL map",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the URL map",
          "minLength": 1,
          "maxLength": 100
        },
        "description": {
          "type": "string",
          "description": "Description of the URL map",
          "minimum": 0,
          "maxLength": 1000
        },
        "entries": {
          "type": "array",
          "description": "Array of URL map entries",
          "items": {
            "$ref": "#/definitions/UrlMapEntry"
          }
        }
      }
    },
    "UrlMapIdentity": {
      "description": "Identifier for a URL map",
      "additionalProperties": false,
      "properties": {
        "href": {
          "type": "string",
          "description": "A reference to this URL map",
          "pattern": "^/v2/url-maps/[a-z0-9]+$"
        }
      }
    },
    "UrlMapState": {
      "type": "object",
      "description": "State for a URL map",
      "additionalProperties": false,
      "properties": {
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "Time when the map was created"
        },
        "entries_size": {
          "type": "number",
          "description": "Total number of entries included in this URL map"
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "description": "Time when the map was last updated"
        }
      }
    },
    "UrlMapEntry": {
      "type": "object",
      "description": "Entry for a URL map",
      "additionalProperties": false,
      "properties": {
        "from": {
          "type": "string",
          "pattern": "^https?://([a-zA-Z0-9][\\w\\-]{0,62}\\.){1,}[a-zA-Z0-9\\-]{2,}/([\\w.\\-~!$&'()*+,;=:@/]|%[A-Fa-f0-9]{2})*\\??([\\w.\\-~!$&'()*+,;=:@/]|[%[A-Fa-f0-9]{2}])*$",
          "description": "The URL that will be mapped from"
        },
        "to": {
          "type": "string",
          "pattern": "^https?://([a-zA-Z0-9][\\w\\-]{0,62}\\.){1,}[a-zA-Z0-9\\-]{2,}/([\\w.\\-~!$&'()*+,;=:@/]|%[A-Fa-f0-9]{2})*\\??([\\w.\\-~!$&'()*+,;=:@/]|[%[A-Fa-f0-9]{2}])*$",
          "description": "The URL that will be mapped to"
        }
      },
      "required": [
        "from",
        "to"
      ]
    },
    "User": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/UserPatch"
        },
        {
          "type": "object",
          "properties": {
            "roles": {
              "type": "array",
              "description": "Roles assigned to this user",
              "items": {
                "$ref": "#/definitions/Roles"
              }
            },
            "groups": {
              "description": "Groups to which a user has accepted an invitation",
              "type": "array",
              "items": {
                "$ref": "#/definitions/Group"
              }
            }
          }
        }
      ]
    },
    "UserPatch": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/Name",
          "description": "Name of the user"
        },
        "phone": {
          "type": "string",
          "description": "Phone number of the user"
        },
        "email": {
          "description": "Email of the user",
          "$ref": "#/definitions/Email"
        },
        "preferences": {
          "type": "object",
          "description": "Preferences for the user"
        },
        "mfa_secret": {
          "type": [
            "string",
            "null"
          ],
          "description": "MFA secret key of the user",
          "pattern": "^(/v2/secrets/[a-z0-9]+|[A-Za-z2-7]{16,32})$"
        }
      }
    },
    "WafFileReference": {
      "type": "object",
      "required": [
        "file",
        "name",
        "active"
      ],
      "additionalProperties": false,
      "properties": {
        "file": {
          "$ref": "#/definitions/ResourceReference",
          "description": "Endpoint for the file id associated with the waf rule."
        },
        "name": {
          "type": "string",
          "description": "The name of the waf rule.",
          "minLength": 1,
          "maxLength": 50
        },
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "The timestamp when a waf rule was uploaded."
        },
        "active": {
          "type": "integer",
          "description": "Indicates if the waf rule is active or not. 1 represents active and 0 is inactive.",
          "default": 0,
          "minimum": 0,
          "maximum": 1
        }
      }
    },
    "WafRule": {
      "type": "object",
      "description": "A Web Application Firewall (WAF) rule for an application.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The unique id of the rule"
        },
        "enabled": {
          "type": "boolean",
          "description": "When true, this rule will be included in the WAF configuration for the application"
        },
        "action": {
          "type": "string",
          "description": "The disruptive action for the rule",
          "enum": [
            "allow",
            "block",
            "deny",
            "drop",
            "pass",
            "pause",
            "proxy",
            "redirect"
          ]
        },
        "message": {
          "type": "string",
          "description": "The message for the rule"
        },
        "tags": {
          "type": "array",
          "description": "Tags for the rule",
          "items": {
            "type": "string"
          }
        },
        "notify_level": {
          "type": "string",
          "description": "The notification level for WAF rule hits.",
          "enum": [
            "none",
            "info",
            "warning",
            "severe"
          ]
        }
      }
    },
    "WafRulePatch": {
      "type": "object",
      "description": "A Web Application Firewall (WAF) rule updatable properties for an application.",
      "properties": {
        "id": {
          "type": "string",
          "description": "The unique id of the rule to identify the rule to be updated. This ID value itself cannot be updated"
        },
        "enabled": {
          "type": "boolean",
          "description": "When true, this rule will be included in the WAF configuration for the application"
        },
        "action": {
          "type": "string",
          "description": "The disruptive action for the rule",
          "enum": [
            "allow",
            "block",
            "deny",
            "drop",
            "pass",
            "pause",
            "proxy",
            "redirect"
          ]
        },
        "message": {
          "type": "string",
          "description": "The message for the rule"
        },
        "tags": {
          "type": "array",
          "description": "Tags for the rule",
          "items": {
            "type": "string"
          }
        },
        "notify_level": {
          "type": "string",
          "description": "The notification level for WAF rule hits.",
          "enum": [
            "none",
            "info",
            "warning",
            "severe"
          ]
        }
      }
    },
    "WafRules": {
      "type": "array",
      "description": "A list of WAF rules ordered in the sequence that they are processed",
      "items": {
        "$ref": "#/definitions/WafRule"
      }
    },
    "WafRulesPatch": {
      "type": "array",
      "description": "A list of ordered WAF rules update requests",
      "items": {
        "$ref": "#/definitions/WafRulePatch"
      }
    },
    "WebControlCondition": {
      "description": "The condition that cause a web control to trigger",
      "oneOf": [
        {
          "$ref": "#/definitions/ConditionAddressInSet"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsNotThreat"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsNotWhitelisted"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsThreat"
        },
        {
          "$ref": "#/definitions/ConditionAddressIsWhitelisted"
        },
        {
          "$ref": "#/definitions/ConditionAddressNotInSet"
        },
        {
          "$ref": "#/definitions/ConditionAuthCookieIsNotSet"
        },
        {
          "$ref": "#/definitions/ConditionAuthCookieIsSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieIsNotSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieIsSet"
        },
        {
          "$ref": "#/definitions/ConditionCookieValueDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionCookieValueMatches"
        },
        {
          "$ref": "#/definitions/ConditionCountryIs"
        },
        {
          "$ref": "#/definitions/ConditionCountryIsNot"
        },
        {
          "$ref": "#/definitions/ConditionHeaderValueDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionHeaderValueMatches"
        },
        {
          "$ref": "#/definitions/ConditionHeadersMatch"
        },
        {
          "$ref": "#/definitions/ConditionHeadersNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionMethodIs"
        },
        {
          "$ref": "#/definitions/ConditionMethodIsNot"
        },
        {
          "$ref": "#/definitions/ConditionRandom"
        },
        {
          "$ref": "#/definitions/ConditionRateLimit"
        },
        {
          "$ref": "#/definitions/ConditionReferrerDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionReferrerIsDefined"
        },
        {
          "$ref": "#/definitions/ConditionReferrerIsNotDefined"
        },
        {
          "$ref": "#/definitions/ConditionReferrerMatches"
        },
        {
          "$ref": "#/definitions/ConditionStatusCodeMatches"
        },
        {
          "$ref": "#/definitions/ConditionUrlDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionUrlMatches"
        },
        {
          "$ref": "#/definitions/ConditionUserAgentDoesNotMatch"
        },
        {
          "$ref": "#/definitions/ConditionUserAgentMatches"
        },
        {
          "$ref": "#/definitions/ConditionIsCrawler"
        }
      ]
    },
    "WebControlConfiguration": {
      "description": "Configuration for a web control",
      "required": [
        "actions",
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Short name describing the web control.",
          "minLength": 1,
          "maxLength": 50
        },
        "description": {
          "type": "string",
          "description": "Optional additional description of the web control.",
          "minLength": 0,
          "maxLength": 255
        },
        "mode": {
          "type": "string",
          "description": "Set as 'maintenance' for maintenance mode web control.",
          "enum": [
            "maintenance",
            "request",
            "response"
          ]
        },
        "enabled": {
          "description": "Enables or disables the web control.",
          "type": "boolean"
        },
        "conditions": {
          "type": "array",
          "description": "An array of conditions. When empty, all requests match",
          "items": {
            "$ref": "#/definitions/WebControlCondition"
          }
        },
        "actions": {
          "type": "array",
          "description": "Actions that are applied when the web control is triggered.",
          "items": {
            "$ref": "#/definitions/PageControlAction"
          },
          "minItems": 0
        }
      }
    },
    "Whitelist": {
      "type": "array",
      "description": "A list of addresses to which no restrictions will apply.",
      "items": {
        "$ref": "#/definitions/WhitelistItem"
      },
      "uniqueItems": true
    },
    "WhitelistItem": {
      "type": "object",
      "required": [
        "address",
        "description"
      ],
      "properties": {
        "address": {
          "$ref": "#/definitions/Cidr"
        },
        "description": {
          "type": "string",
          "description": "A description of the white listed address."
        }
      }
    },
    "WhitelistItemPut": {
      "type": "object",
      "required": [
        "description"
      ],
      "properties": {
        "description": {
          "type": "string",
          "description": "A description of the white listed address."
        }
      }
    }
  },
  "parameters": {
    "authorization": {
      "name": "authorization",
      "in": "query",
      "description": "Access token.  The authorization request header and this query parameter are exclusive.  Exactly one must be provided.",
      "required": false,
      "type": "string"
    },
    "filter": {
      "name": "filter",
      "in": "query",
      "description": "A set of filters to be applied to the query. Filter expressions are separated by <tt>and</tt> or <tt>or</tt>, and can be nested in parentheses to enforce precedence.",
      "required": false,
      "type": "string"
    },
    "format": {
      "name": "format",
      "in": "query",
      "description": "Format of the logs. One of <tt>json</tt> <tt>csv</tt>.",
      "required": false,
      "type": "string"
    },
    "from": {
      "description": "Beginning of a date-time range.",
      "in": "query",
      "name": "from",
      "pattern": "^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:Z|[+-][01][0-9]:[0-5][0-9])$",
      "required": false,
      "type": "string"
    },
    "groupby": {
      "name": "groupby",
      "in": "query",
      "description": "A field or interval function to be grouped by. An interval function is specified as <tt>interval(<i>n</i>)</tt>, where <i>n</i> specifies the duration of the groups returned, with each matching record being assigned to the interval containing it. If not provided, then no group result is returned",
      "required": false,
      "type": "string"
    },
    "groupfilters": {
      "name": "groupfilters",
      "in": "query",
      "description": "A comma-separated list of filters that specify multiple groups will be returned, with each constructed from the filtered logs. The special filter \"other\" can appear as a final filter to select logs that do not match other filters. Each group filter selects logs from within the set already determined by the \"filter\" parameter",
      "required": false,
      "type": "string"
    },
    "grouplimit": {
      "name": "grouplimit",
      "in": "query",
      "description": "The maximum number of group records returned. If not provided, the default limit is 100. The maximum grouplimit is 200.",
      "required": false,
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "grouporder": {
      "name": "grouporder",
      "in": "query",
      "description": "A comma separated list that dictates the order in which grouped results should be returned.",
      "required": false,
      "type": "string"
    },
    "groupselect": {
      "name": "groupselect",
      "in": "query",
      "description": "A comma separated list of fields with aggregation functions in the format <aggregation>(<field>). Ex. sum(bytes_out),sum(bytes_in). Possible aggregations are sum|avg|min|max|count. 'count' is a special aggregation function and should not be specified with any field. If not provided, the default is 'count'.",
      "required": false,
      "type": "string"
    },
    "id": {
      "name": "id",
      "in": "path",
      "description": "The identity of the object.",
      "required": true,
      "type": "string"
    },
    "limit": {
      "name": "limit",
      "in": "query",
      "description": "The maximum number items to be returned. If not specified, the default is 100",
      "required": false,
      "type": "integer",
      "minimum": 0
    },
    "order": {
      "name": "order",
      "in": "query",
      "description": "A comma-separated list of attributes that specifies the order in which results should be returned. Each attribute may be prefixed by a '-' or '+' to specify descending or ascending sort respectively. The default for each attribute is ascending",
      "required": false,
      "type": "string"
    },
    "to": {
      "description": "End of a date-time range.",
      "in": "query",
      "name": "to",
      "pattern": "^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:Z|[+-][01][0-9]:[0-5][0-9])$",
      "required": false,
      "type": "string"
    },
    "resolution": {
      "name": "resolution",
      "in": "query",
      "description": "Size of each division for which metrics data will be returned, in seconds. Resolution should not be mentioned when metrics summary is needed",
      "required": false,
      "type": "integer",
      "minimum": 5
    },
    "summarize": {
      "name": "summarize",
      "in": "query",
      "description": "Indicates if summarized value for the series should be returned for the interval.",
      "required": false,
      "type": "boolean",
      "default": false
    },
    "start": {
      "name": "start",
      "in": "query",
      "description": "The starting item to be returned, used for pagination.",
      "required": false,
      "type": "integer",
      "minimum": 1
    }
  }
}