{
   "openapi": "3.0.0",
   "info": {
      "title": "Fraud Prevention API",
      "description": "The Fraud Prevention API is a set of APIs supporting Fraud detection including managing own fraud rules. For more details, please visit the [Vonage Developer Center](https://developer.vonage.com).",
      "version": "0.1.0",
      "contact": {
         "name": "Nexmo DevRel",
         "email": "devrel@nexmo.com",
         "url": "https://developer.nexmo.com/"
      },
      "license": {
         "name": "Apache 2.0",
         "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
      }
   },
   "servers": [
      {
         "url": "https://api.nexmo.com/v0.1/fraud-defender",
         "description": "API URL"
      }
   ],
   "security": [
      {
         "basicAuth": []
      }
   ],
   "tags": [
      {
         "name": "Custom Fraud Rules",
         "description": "Operations for managing specific fraud rules per product."
      },
      {
         "name": "AIT protection",
         "description": "Artificial Inflation of Traffic protection configuration."
      },
      {
         "name": "Rules",
         "description": "General fraud rule management and listing."
      }
   ],
   "paths": {
      "/configuration/custom-rules/{product}": {
         "get": {
            "tags": [
               "Custom Fraud Rules"
            ],
            "summary": "List custom fraud rules",
            "description": "Returns a paginated list of custom fraud rules filtered by product type.",
            "operationId": "getRules",
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductCustomRules"
               },
               {
                  "$ref": "#/components/parameters/PageSizeCustomRules"
               },
               {
                  "$ref": "#/components/parameters/PageCustomRules"
               },
               {
                  "$ref": "#/components/parameters/Threshold"
               },
               {
                  "$ref": "#/components/parameters/Interval"
               },
               {
                  "$ref": "#/components/parameters/Countries"
               }
            ],
            "responses": {
               "200": {
                  "$ref": "#/components/responses/CustomRulePaginatedResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         }
      },
      "/configuration/custom-rules/{id}": {
         "put": {
            "tags": [
               "Custom Fraud Rules"
            ],
            "summary": "Edit custom fraud rule by ID",
            "description": "Update an existing fraud rule configuration using its unique identifier.",
            "operationId": "updateRule",
            "parameters": [
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "requestBody": {
               "$ref": "#/components/requestBodies/CustomRuleRequestBody"
            },
            "responses": {
               "200": {
                  "$ref": "#/components/responses/CustomRuleResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "404": {
                  "$ref": "#/components/responses/404"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         }
      },
      "/configuration/custom-rules": {
         "post": {
            "tags": [
               "Custom Fraud Rules"
            ],
            "summary": "Create custom fraud rule",
            "description": "Create a new custom fraud rule for a specific product and country.",
            "operationId": "addRule",
            "requestBody": {
               "$ref": "#/components/requestBodies/CustomRuleRequestBody"
            },
            "responses": {
               "201": {
                  "$ref": "#/components/responses/CustomRuleCreatedResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         }
      },
      "/configuration/custom-rules/{product}/{id}": {
         "get": {
            "tags": [
               "Custom Fraud Rules"
            ],
            "summary": "Get custom fraud rule by product and id",
            "description": "Retrieve detailed information for a specific custom fraud rule.",
            "operationId": "getRule",
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductCustomRules"
               },
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "responses": {
               "200": {
                  "$ref": "#/components/responses/CustomRuleResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "404": {
                  "$ref": "#/components/responses/404"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         },
         "delete": {
            "tags": [
               "Custom Fraud Rules"
            ],
            "operationId": "deleteRule",
            "summary": "Delete custom fraud rule by ID",
            "description": "Permanently remove a custom fraud rule from the system.",
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductCustomRules"
               },
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "responses": {
               "204": {
                  "$ref": "#/components/responses/NoContent"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "404": {
                  "$ref": "#/components/responses/404"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         }
      },
      "/configurations/protections/ait/{product}": {
         "get": {
            "operationId": "get-ait-config-by-id",
            "summary": "Get AIT configuration",
            "description": "Retrieve the current AIT protection configuration for a given product.",
            "tags": [
               "AIT protection"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductAit"
               }
            ],
            "responses": {
               "200": {
                  "$ref": "#/components/responses/AitProtectionResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         },
         "put": {
            "operationId": "create-or-update-ait-config",
            "summary": "Create or update AIT configuration",
            "description": "Enable or modify AIT protection settings globally or per country.",
            "tags": [
               "AIT protection"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductAit"
               }
            ],
            "requestBody": {
               "$ref": "#/components/requestBodies/AitProtectionRequestBody"
            },
            "responses": {
               "200": {
                  "$ref": "#/components/responses/AitProtectionResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               },
               "403": {
                  "$ref": "#/components/responses/ErrorForbidden"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         }
      },
      "/rules": {
         "post": {
            "operationId": "create-rule",
            "tags": [
               "Rules"
            ],
            "summary": "Create rule",
            "description": "Create a new fraud rule based on phone number prefixes.",
            "requestBody": {
               "$ref": "#/components/requestBodies/CreateRuleRequestBody"
            },
            "responses": {
               "200": {
                  "$ref": "#/components/responses/RuleResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               },
               "409": {
                  "$ref": "#/components/responses/ErrorConflict"
               },
               "500": {
                  "$ref": "#/components/responses/500"
               }
            }
         },
         "get": {
            "operationId": "list-rules",
            "summary": "Listing rules",
            "description": "List all existing fraud rules with support for filtering by prefix, action, and status.",
            "tags": [
               "Rules"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/ProductRules"
               },
               {
                  "$ref": "#/components/parameters/Prefix"
               },
               {
                  "$ref": "#/components/parameters/Reason"
               },
               {
                  "$ref": "#/components/parameters/Action"
               },
               {
                  "$ref": "#/components/parameters/RuleType"
               },
               {
                  "$ref": "#/components/parameters/Status"
               },
               {
                  "$ref": "#/components/parameters/ShowDefaultRules"
               },
               {
                  "$ref": "#/components/parameters/ShowCustomRules"
               },
               {
                  "$ref": "#/components/parameters/PageSizeRules"
               },
               {
                  "$ref": "#/components/parameters/PageRules"
               },
               {
                  "$ref": "#/components/parameters/Sort"
               },
               {
                  "$ref": "#/components/parameters/Order"
               }
            ],
            "responses": {
               "200": {
                  "$ref": "#/components/responses/RulesPaginatedResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               }
            }
         }
      },
      "/rules/{id}": {
         "get": {
            "operationId": "get-rule-by-id",
            "summary": "Get rule by id",
            "description": "Retrieve a specific fraud rule by its unique ID.",
            "tags": [
               "Rules"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "responses": {
               "200": {
                  "$ref": "#/components/responses/RuleResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               },
               "404": {
                  "$ref": "#/components/responses/404"
               }
            }
         },
         "delete": {
            "operationId": "archive-rule-by-id",
            "summary": "Archive rule by id",
            "description": "Mark a rule as archived. Archived rules are no longer active in the fraud detection flow.",
            "tags": [
               "Rules"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "responses": {
               "204": {
                  "$ref": "#/components/responses/NoContent"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               }
            }
         },
         "patch": {
            "operationId": "update-rule-by-id",
            "summary": "Update rule by id",
            "description": "Update specific fields of an existing fraud rule.",
            "tags": [
               "Rules"
            ],
            "parameters": [
               {
                  "$ref": "#/components/parameters/IdPath"
               }
            ],
            "requestBody": {
               "$ref": "#/components/requestBodies/UpdateRuleRequestBody"
            },
            "responses": {
               "200": {
                  "$ref": "#/components/responses/RuleResponse"
               },
               "400": {
                  "$ref": "#/components/responses/ErrorBadRequest"
               },
               "401": {
                  "$ref": "#/components/responses/401"
               }
            }
         }
      }
   },
   "components": {
      "securitySchemes": {
         "basicAuth": {
            "type": "http",
            "scheme": "basic"
         }
      },
      "parameters": {
         "ProductCustomRules": {
            "name": "product",
            "in": "path",
            "required": true,
            "schema": {
               "type": "string",
               "enum": [
                  "SMS",
                  "VOICE"
               ]
            }
         },
         "IdPath": {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Rule ID in UUID format",
            "schema": {
               "type": "string",
               "example": "abcdef01-2345-6789-abcd-ef0123456789"
            }
         },
         "PageSizeCustomRules": {
            "name": "page_size",
            "description": "Page size in Integer format",
            "in": "query",
            "required": false,
            "schema": {
               "type": "integer",
               "format": "int32",
               "default": 100
            },
            "example": 100
         },
         "PageCustomRules": {
            "name": "page",
            "description": "Page number in Integer format",
            "in": "query",
            "required": false,
            "schema": {
               "type": "integer",
               "format": "int32",
               "default": 1
            },
            "example": 1
         },
         "Threshold": {
            "name": "threshold",
            "description": "Threshold value in Integer format",
            "in": "query",
            "required": false,
            "schema": {
               "type": "integer",
               "format": "int32"
            },
            "example": 10
         },
         "Interval": {
            "name": "interval",
            "description": "Interval value in Integer format it will be presented in minutes",
            "in": "query",
            "required": false,
            "schema": {
               "type": "integer",
               "format": "int32"
            },
            "example": 60
         },
         "Countries": {
            "name": "countries",
            "description": "Array of ISO countries codes",
            "in": "query",
            "required": false,
            "schema": {
               "type": "array",
               "items": {
                  "type": "string"
               }
            },
            "example": [
               "GB",
               "US"
            ]
         },
         "ProductAit": {
            "name": "product",
            "in": "path",
            "description": "product type",
            "required": true,
            "schema": {
               "type": "string",
               "enum": [
                  "sms"
               ],
               "default": "sms"
            }
         },
         "ProductRules": {
            "name": "product",
            "in": "query",
            "description": "if passed, lists rules for that product. if not, gives such for all product types",
            "required": false,
            "schema": {
               "type": "string",
               "enum": [
                  "voice",
                  "sms"
               ]
            }
         },
         "Prefix": {
            "name": "prefix",
            "in": "query",
            "description": "phone prefix filter",
            "schema": {
               "type": "string"
            },
            "example": "30689",
            "required": false
         },
         "Reason": {
            "name": "reason",
            "in": "query",
            "description": "reason filter",
            "schema": {
               "type": "string"
            },
            "example": "Reason",
            "required": false
         },
         "Action": {
            "name": "action",
            "in": "query",
            "description": "action filter",
            "schema": {
               "type": "string"
            },
            "example": "Action",
            "required": false
         },
         "RuleType": {
            "name": "rule_type",
            "in": "query",
            "description": "rule type filter (allow, block)",
            "schema": {
               "type": "string"
            },
            "example": "block",
            "required": false
         },
         "Status": {
            "name": "status",
            "in": "query",
            "description": "filter rules by status (active, archived, all)",
            "required": false,
            "schema": {
               "type": "string"
            }
         },
         "ShowDefaultRules": {
            "name": "show_default_rules",
            "in": "query",
            "description": "defines whether to display default rules or not",
            "schema": {
               "type": "boolean",
               "default": true
            },
            "example": false,
            "required": false
         },
         "ShowCustomRules": {
            "name": "show_custom_rules",
            "in": "query",
            "description": "show custom rules flag",
            "schema": {
               "type": "boolean",
               "default": true
            },
            "example": false,
            "required": false
         },
         "PageSizeRules": {
            "name": "page_size",
            "in": "query",
            "description": "page size parameter, starts from 1",
            "schema": {
               "type": "string",
               "default": 150
            },
            "example": "3",
            "required": false
         },
         "PageRules": {
            "name": "page",
            "in": "query",
            "description": "page offset parameter, starts from 1",
            "schema": {
               "type": "string",
               "default": 1
            },
            "example": "2",
            "required": false
         },
         "Sort": {
            "name": "sort",
            "in": "query",
            "description": "sort by product, prefix or traffic and it's case-insensitive",
            "schema": {
               "type": "string",
               "enum": [
                  "product",
                  "prefix",
                  "traffic"
               ]
            },
            "required": false
         },
         "Order": {
            "name": "order",
            "in": "query",
            "description": "sort order either asc or desc and it's case-insensitive",
            "schema": {
               "type": "string",
               "enum": [
                  "asc",
                  "desc"
               ],
               "default": "desc"
            },
            "example": "asc",
            "required": false
         }
      },
      "requestBodies": {
         "CustomRuleRequestBody": {
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CustomRuleRequest"
                  }
               }
            },
            "required": true
         },
         "AitProtectionRequestBody": {
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/AitProtectionConfigurationRequestBody"
                  }
               }
            },
            "required": true
         },
         "CreateRuleRequestBody": {
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CreateRuleRequestBody"
                  }
               }
            },
            "required": true
         },
         "UpdateRuleRequestBody": {
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/UpdateRuleRequestBody"
                  }
               }
            }
         }
      },
      "responses": {
         "401": {
            "description": "Authentication failure",
            "headers": {
               "X-Request-Id": {
                  "$ref": "#/components/headers/X-Request-Id"
               }
            },
            "content": {
               "application/problem+json": {
                  "schema": {
                     "oneOf": [
                        {
                           "description": "Missing or Invalid Credentials",
                           "type": "object",
                           "required": [
                              "type",
                              "title",
                              "instance"
                           ],
                           "properties": {
                              "type": {
                                 "type": "string",
                                 "description": "Link to error / remediation options",
                                 "example": "https://developer.vonage.com/api-errors/#unathorized"
                              },
                              "title": {
                                 "type": "string",
                                 "description": "Generic error message",
                                 "example": "You did not provide correct credentials."
                              },
                              "detail": {
                                 "type": "string",
                                 "description": "Additional information about the error",
                                 "example": "Check that you're using the correct credentials, and that your account has this feature enabled"
                              },
                              "instance": {
                                 "type": "string",
                                 "description": "Internal Trace ID",
                                 "example": "bf0ca0bf927b3b52e3cb03217e1a1ddf"
                              }
                           }
                        },
                        {
                           "description": "Invalid Application Type",
                           "type": "object",
                           "required": [
                              "type",
                              "title",
                              "instance"
                           ],
                           "properties": {
                              "type": {
                                 "type": "string",
                                 "description": "Link to error / remediation options",
                                 "example": "https://developer.vonage.com/api-errors/#unprovisioned"
                              },
                              "title": {
                                 "type": "string",
                                 "description": "Generic error message",
                                 "example": "The crendentials provided do not have access to the requested product"
                              },
                              "detail": {
                                 "type": "string",
                                 "description": "Additional information about the error",
                                 "example": "Check your API key is correct and has been whitelisted"
                              },
                              "instance": {
                                 "type": "string",
                                 "description": "Internal Trace ID",
                                 "example": "bf0ca0bf927b3b52e3cb03217e1a1ddf"
                              }
                           }
                        }
                     ]
                  }
               }
            }
         },
         "404": {
            "description": "Not Found",
            "headers": {
               "X-Request-Id": {
                  "$ref": "#/components/headers/X-Request-Id"
               }
            },
            "content": {
               "application/problem+json": {
                  "schema": {
                     "$ref": "#/components/schemas/ErrorResponse"
                  }
               }
            }
         },
         "500": {
            "description": "Internal error",
            "headers": {
               "X-Request-Id": {
                  "$ref": "#/components/headers/X-Request-Id"
               }
            },
            "content": {
               "application/problem+json": {
                  "schema": {
                     "$ref": "#/components/schemas/ErrorResponse"
                  }
               }
            }
         },
         "CustomRulePaginatedResponse": {
            "description": "OK",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CustomRulePaginatedResponse"
                  }
               }
            }
         },
         "CustomRuleResponse": {
            "description": "OK",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CustomRuleResponse"
                  }
               }
            }
         },
         "CustomRuleCreatedResponse": {
            "description": "Created",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CustomRuleResponse"
                  }
               }
            }
         },
         "AitProtectionResponse": {
            "description": "AIT protection config response",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/AitProtectionConfigurationResponseBody"
                  },
                  "example": {
                     "data": {
                        "protection_enabled": true,
                        "default_protection_level": "standard",
                        "protection_level_per_country": [
                           {
                              "country": "US",
                              "protection_level": "standard"
                           }
                        ],
                        "_links": {
                           "self": {
                              "href": "https://api.nexmo.com/v0.1/fraud-defender/configurations/protections/ait/SMS"
                           }
                        }
                     }
                  }
               }
            }
         },
         "RuleResponse": {
            "description": "rule operation success",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/CreateRuleResponseBody"
                  }
               }
            }
         },
         "RulesPaginatedResponse": {
            "description": "rule listing success",
            "content": {
               "application/json": {
                  "schema": {
                     "$ref": "#/components/schemas/GetRuleResponseBody"
                  }
               }
            }
         },
         "NoContent": {
            "description": "No Content"
         },
         "ErrorBadRequest": {
            "description": "Bad Request",
            "content": {
               "application/json": {
                  "schema": {
                     "type": "object",
                     "properties": {
                        "title": {
                           "type": "string",
                           "example": "Bad request."
                        },
                        "type": {
                           "type": "string",
                           "example": "https://developer.vonage.com/api-errors#http:error:validation-fail"
                        },
                        "code": {
                           "type": "string",
                           "example": "http:error:validation-fail"
                        },
                        "detail": {
                           "type": "string",
                           "example": "Input validation failure."
                        }
                     }
                  }
               }
            }
         },
         "ErrorForbidden": {
            "description": "Forbidden",
            "content": {
               "application/json": {
                  "schema": {
                     "type": "object",
                     "properties": {
                        "title": {
                           "type": "string",
                           "example": "Forbidden."
                        },
                        "type": {
                           "type": "string",
                           "example": "https://developer.vonage.com/api-errors#forbidden"
                        },
                        "code": {
                           "type": "string",
                           "example": "forbidden"
                        },
                        "detail": {
                           "type": "string",
                           "example": "No permissions to perform action."
                        }
                     }
                  }
               }
            }
         },
         "ErrorConflict": {
            "description": "Conflict",
            "content": {
               "application/json": {
                  "schema": {
                     "type": "object",
                     "properties": {
                        "title": {
                           "type": "string",
                           "example": "Conflict."
                        },
                        "type": {
                           "type": "string",
                           "example": "https://developer.vonage.com/api/fraud-defender#http:error:conflict"
                        },
                        "code": {
                           "type": "string",
                           "example": "http:error:conflict"
                        },
                        "detail": {
                           "type": "string",
                           "example": "Entity couldn't be added as conflicts with currently existing one"
                        }
                     }
                  }
               }
            }
         }
      },
      "schemas": {
         "AitProtectionConfigurationRequestBody": {
            "type": "object",
            "properties": {
               "data": {
                  "type": "object",
                  "required": [
                     "protection_enabled"
                  ],
                  "properties": {
                     "protection_enabled": {
                        "type": "boolean",
                        "description": "used to turn on/off AIT protection",
                        "example": true
                     },
                     "default_protection_level": {
                        "type": "string",
                        "description": "Required if protection_enabled is set to true. Default AIT protection level will be used for countries where no specific per-country configuration exists.",
                        "example": "standard",
                        "enum": [
                           "high",
                           "standard",
                           "none"
                        ]
                     },
                     "protection_level_per_country": {
                        "type": "array",
                        "items": {
                           "$ref": "#/components/schemas/AitProtectionConfigurationPerCountryData"
                        },
                        "description": "array of specific per-country AIT protection level configurations"
                     }
                  }
               }
            }
         },
         "AitProtectionConfigurationResponseBody": {
            "type": "object",
            "properties": {
               "data": {
                  "type": "object",
                  "required": [
                     "protection_enabled"
                  ],
                  "properties": {
                     "protection_enabled": {
                        "type": "boolean",
                        "description": "used to turn on/off AIT protection",
                        "example": true
                     },
                     "default_protection_level": {
                        "type": "string",
                        "description": "Required if protection_enabled is set to true. Default AIT protection level will be used for countries where no specific per-country configuration exists.",
                        "example": "standard",
                        "enum": [
                           "high",
                           "standard",
                           "none"
                        ]
                     },
                     "protection_level_per_country": {
                        "type": "array",
                        "items": {
                           "$ref": "#/components/schemas/AitProtectionConfigurationPerCountryData"
                        },
                        "description": "array of specific per-country AIT protection level configurations"
                     },
                     "_links": {
                        "type": "object",
                        "properties": {
                           "self": {
                              "type": "object",
                              "properties": {
                                 "href": {
                                    "type": "string",
                                    "example": "https://api.nexmo.com/v0.1/fraud-defender/configurations/protections/ait/SMS"
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         },
         "AitProtectionConfigurationPerCountryData": {
            "type": "object",
            "required": [
               "country",
               "protection_level"
            ],
            "properties": {
               "country": {
                  "type": "string",
                  "description": "country code in ISO 3166-1 Alpha-2 standard",
                  "example": "US",
                  "pattern": "[A-Z]{2}"
               },
               "protection_level": {
                  "type": "string",
                  "description": "AIT protection level",
                  "example": "high",
                  "enum": [
                     "high",
                     "standard",
                     "none"
                  ]
               }
            }
         },
         "CreateRuleRequestBody": {
            "type": "object",
            "properties": {
               "product": {
                  "type": "string",
                  "enum": [
                     "voice",
                     "sms"
                  ],
                  "example": "sms"
               },
               "prefix": {
                  "type": "string",
                  "maxLength": 15,
                  "example": "44",
                  "description": "The prefix attribute is used to check whether a phone number begins with a particular sequence of digits. It's not related to phone number prefixes."
               },
               "reason": {
                  "type": "string",
                  "example": "My custom prefix rule",
                  "description": "Human readable reason"
               },
               "action": {
                  "type": "string",
                  "example": "block",
                  "enum": [
                     "block",
                     "allow"
                  ]
               },
               "status": {
                  "type": "string",
                  "example": "active",
                  "enum": [
                     "active",
                     "archived"
                  ]
               }
            },
            "required": [
               "product",
               "prefix",
               "reason",
               "action"
            ]
         },
         "CreateRuleResponseBody": {
            "type": "object",
            "properties": {
               "id": {
                  "type": "string",
                  "example": "test-id"
               },
               "product": {
                  "type": "string",
                  "enum": [
                     "voice",
                     "sms"
                  ],
                  "example": "sms"
               },
               "prefix": {
                  "type": "string",
                  "example": "44",
                  "description": "The prefix attribute is used to check whether a phone number begins with a particular sequence of digits. It's not related to phone number prefixes."
               },
               "direction": {
                  "type": "string",
                  "enum": [
                     "from",
                     "to"
                  ],
                  "example": "from"
               },
               "traffic_direction": {
                  "type": "string",
                  "example": "outbound",
                  "description": "Outbound rules apply to traffic generated from you API Key. Inbound rules apply to traffic sent to your phone numbers.",
                  "default": "outbound"
               },
               "action": {
                  "type": "string",
                  "enum": [
                     "block",
                     "allow"
                  ],
                  "example": "block"
               },
               "reason": {
                  "type": "string",
                  "example": "My custom prefix rule",
                  "description": "Human readable reason"
               },
               "permission": {
                  "type": "string",
                  "enum": [
                     "view",
                     "edit"
                  ],
                  "example": "edit"
               },
               "status": {
                  "type": "string",
                  "enum": [
                     "active",
                     "archived"
                  ],
                  "example": "active"
               },
               "created_timestamp": {
                  "type": "string",
                  "example": "2022-12-09T18:19:26"
               },
               "updated_timestamp": {
                  "type": "string",
                  "example": "2022-11-09T18:19:26"
               },
               "archived_timestamp": {
                  "type": "string",
                  "example": "2022-10-09T18:19:26"
               },
               "_links": {
                  "type": "object",
                  "properties": {
                     "self": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules/test-id"
                           }
                        }
                     }
                  }
               }
            }
         },
         "UpdateRuleRequestBody": {
            "type": "object",
            "required": [
               "reason"
            ],
            "properties": {
               "reason": {
                  "type": "string",
                  "example": "My custom prefix rule",
                  "description": "Human readable reason"
               }
            }
         },
         "GetRuleResponseBody": {
            "allOf": [
               {
                  "$ref": "#/components/schemas/RulePaginatedResult"
               },
               {
                  "type": "object",
                  "properties": {
                     "_embedded": {
                        "type": "object",
                        "properties": {
                           "rules": {
                              "type": "array",
                              "items": {
                                 "$ref": "#/components/schemas/CreateRuleResponseBody"
                              }
                           }
                        }
                     }
                  }
               }
            ]
         },
         "Page": {
            "type": "object",
            "properties": {
               "number": {
                  "type": "number",
                  "example": 2,
                  "description": "Page number"
               },
               "size": {
                  "type": "number",
                  "example": 3,
                  "description": "Page size number or 0 if no entries found. Default is 150."
               },
               "totalElements": {
                  "type": "number",
                  "example": 11,
                  "description": "Total entries for the result set or 0 if no entries found"
               },
               "totalPages": {
                  "type": "number",
                  "example": 4,
                  "description": "Total pages for the paginated result set or 1 if no entries found"
               }
            }
         },
         "CustomRuleRequest": {
            "type": "object",
            "properties": {
               "product": {
                  "type": "string",
                  "description": "Product type (SMS or VOICE)",
                  "example": "SMS",
                  "enum": [
                     "VOICE",
                     "SMS"
                  ]
               },
               "country": {
                  "description": "ISO country code",
                  "type": "string",
                  "example": "GB"
               },
               "interval": {
                  "type": "integer",
                  "format": "int32",
                  "example": 60
               },
               "threshold": {
                  "type": "integer",
                  "format": "int32",
                  "example": 10
               }
            }
         },
         "CustomRuleResponse": {
            "type": "object",
            "properties": {
               "country": {
                  "type": "string",
                  "example": "GB"
               },
               "interval": {
                  "type": "integer",
                  "format": "int32",
                  "example": 60
               },
               "threshold": {
                  "type": "integer",
                  "format": "int32",
                  "example": 10
               },
               "product": {
                  "type": "string",
                  "example": "SMS"
               },
               "id": {
                  "type": "string",
                  "example": "abcdef01-2345-6789-abcd-ef0123456789"
               },
               "_links": {
                  "type": "object",
                  "properties": {
                     "self": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/configuration/custom-rules/SMS/e21ace94-54fa-4365-a824-38033dc06779",
                              "description": "self link"
                           }
                        }
                     }
                  }
               }
            }
         },
         "CustomRulePaginatedResponse": {
            "type": "object",
            "properties": {
               "page": {
                  "type": "integer",
                  "format": "int32",
                  "example": 1
               },
               "page_size": {
                  "type": "integer",
                  "format": "int32",
                  "example": 100
               },
               "total_pages": {
                  "type": "integer",
                  "format": "int32",
                  "example": 5
               },
               "total_items": {
                  "type": "integer",
                  "format": "int32",
                  "example": 450
               },
               "_embedded": {
                  "type": "object",
                  "properties": {
                     "entries": {
                        "type": "array",
                        "items": {
                           "$ref": "#/components/schemas/CustomRuleResponse"
                        }
                     }
                  }
               },
               "_links": {
                  "type": "object",
                  "properties": {
                     "first": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/configuration/custom-rules/SMS?page=1&size=100",
                              "description": "first link of the paginated result set"
                           }
                        }
                     },
                     "last": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/configuration/custom-rules/SMS?page=4&size=100",
                              "description": "last link of the paginated result set"
                           }
                        }
                     },
                     "prev": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "description": "previous link of the paginated result set",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/configuration/custom-rules/SMS?page=1&size=100"
                           }
                        }
                     },
                     "self": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/configuration/custom-rules/SMS?page=1&size=100",
                              "description": "self link"
                           }
                        }
                     }
                  }
               }
            }
         },
         "RulePaginatedResult": {
            "type": "object",
            "properties": {
               "_links": {
                  "type": "object",
                  "properties": {
                     "first": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules?order=asc&page=1&page_size=3",
                              "description": "first link of the paginated result set"
                           }
                        }
                     },
                     "last": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules?order=asc&page=4&page_size=3",
                              "description": "last link of the paginated result set"
                           }
                        }
                     },
                     "next": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules?order=asc&page=3&page_size=3",
                              "description": "next link of the paginated result set"
                           }
                        }
                     },
                     "prev": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "description": "previous link of the paginated result set",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules?order=asc&page=1&page_size=3"
                           }
                        }
                     },
                     "self": {
                        "type": "object",
                        "properties": {
                           "href": {
                              "type": "string",
                              "example": "https://api.nexmo.com/v0.1/fraud-defender/rules?order=asc&page=2&page_size=3",
                              "description": "self link"
                           }
                        }
                     }
                  }
               },
               "page": {
                  "$ref": "#/components/schemas/Page"
               }
            }
         },
         "ErrorResponse": {
            "type": "object",
            "description": "Base error response following RFC 7807",
            "required": [
               "type",
               "title",
               "instance"
            ],
            "properties": {
               "type": {
                  "type": "string",
                  "description": "Link to error / remediation options",
                  "example": "https://developer.vonage.com/api-errors"
               },
               "title": {
                  "type": "string",
                  "description": "Generic error message",
                  "example": "An error occurred"
               },
               "detail": {
                  "type": "string",
                  "description": "Additional information about the error",
                  "example": "More details about what went wrong"
               },
               "instance": {
                  "type": "string",
                  "description": "Internal Trace ID",
                  "example": "bf0ca0bf927b3b52e3cb03217e1a1ddf"
               }
            }
         }
      },
      "headers": {
         "X-Request-Id": {
            "description": "A unique identifier for the request, used for tracking and debugging",
            "schema": {
               "type": "string",
               "format": "uuid",
               "example": "f94b4e56-604e-07e5-e5ad-5a7228618f81"
            }
         }
      }
   },
   "x-errors": {
      "http:error:conflict": {
         "description": "Rule couldn't be added as conflicts with currently existing rules"
      },
      "system:error:internal-error": {
         "description": "Something went wrong."
      }
   }
}