---
title: Update Bot Detection Predictor (rule exclusion)
description: This request uses the riskPredictors endpoint to update the Bot Detection predictor, specifying that two of the bot detection rules should be ignored when evaluating the level of risk.
component: pingone-api
page_id: pingone-api:protect:risk-predictors/update_bot_detection_predictor
canonical_url: https://developer.pingidentity.com/pingone-api/protect/risk-predictors/update_bot_detection_predictor.html
section_ids:
  prerequisites: Prerequisites
  headers: Headers
  body: Body
  example-request: Example Request
  example-response: Example Response
---

# Update Bot Detection Predictor (rule exclusion)

##

```none
PUT {{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}
```

This request uses the `riskPredictors` endpoint to update the Bot Detection predictor, specifying that two of the bot detection rules should be ignored when evaluating the level of risk.

The `excludedDetectionRules` array is used to specify the IDs of the rules that should be ignored.

You can find the IDs for the available rules in [Predictor rules](https://docs.pingidentity.com/pingone/threat_protection_using_pingone_protect/p1_protect_predictor_rules.html).

The URL for the request contains the ID of the Bot Detection predictor. You can find this ID by sending a READ request to [get the details for all of the risk predictors](read-all-risk-predictors.html) in the PingOne environment.

Note that while the predictor is identified by the predictor ID in the URL of the request, the following parameters are also required in order for the request to succeed: `name`, `compactName`, `type`.

### Prerequisites

* Refer to [Risk Predictors](../risk-predictors.html) for important overview information.

> **Collapse: Request Model**
>
> For complete property descriptions, refer to the [Base risk predictor data model](../risk-predictors.html#base-risk-predictor-data-model).
>
> **Base data model**
>
> | Property                          | Type    | Required? |
> | --------------------------------- | ------- | --------- |
> | `compactName`                     | String  | Required  |
> | `default.result.level`            | String  | Optional  |
> | `default.result.type`             | String  | Optional  |
> | `excludedDetectionRules`          | String  | Optional  |
> | `includeRepeatedEventsWithoutSdk` | Boolean | Optional  |
> | `name`                            | String  | Required  |
> | `type`                            | String  | Required  |

### Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

### Body

raw ( application/json )

```json
{
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
        "result": {
            "level": "MEDIUM",
            "type": "VALUE"
        }
    },
    "excludedDetectionRules": [
        610,
        660
    ]
}
```

##

### Example Request

* cURL

* C#

* Go

* HTTP

* Java

* jQuery

* NodeJS

* Python

* PHP

* Ruby

* Swift

```shell
curl --location --globoff --request PUT '{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
        "result": {
            "level": "MEDIUM",
            "type": "VALUE"
        }
    },
    "excludedDetectionRules": [
        610,
        660
    ]
}'
```

```csharp
var options = new RestClientOptions("{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Put);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"    ""name"": ""Bot Detection""," + "\n" +
@"    ""compactName"": ""botDetection""," + "\n" +
@"    ""type"": ""BOT""," + "\n" +
@"    ""includeRepeatedEventsWithoutSdk"": true," + "\n" +
@"    ""default"": {" + "\n" +
@"        ""result"": {" + "\n" +
@"            ""level"": ""MEDIUM""," + "\n" +
@"            ""type"": ""VALUE""" + "\n" +
@"        }" + "\n" +
@"    }," + "\n" +
@"    ""excludedDetectionRules"": [" + "\n" +
@"        610," + "\n" +
@"        660" + "\n" +
@"    ]" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

```golang
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}"
  method := "PUT"

  payload := strings.NewReader(`{
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
        "result": {
            "level": "MEDIUM",
            "type": "VALUE"
        }
    },
    "excludedDetectionRules": [
        610,
        660
    ]
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

```http
PUT /v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
        "result": {
            "level": "MEDIUM",
            "type": "VALUE"
        }
    },
    "excludedDetectionRules": [
        610,
        660
    ]
}
```

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"Bot Detection\",\n    \"compactName\": \"botDetection\",\n    \"type\": \"BOT\",\n    \"includeRepeatedEventsWithoutSdk\": true,\n    \"default\": {\n        \"result\": {\n            \"level\": \"MEDIUM\",\n            \"type\": \"VALUE\"\n        }\n    },\n    \"excludedDetectionRules\": [\n        610,\n        660\n    ]\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
      "result": {
        "level": "MEDIUM",
        "type": "VALUE"
      }
    },
    "excludedDetectionRules": [
      610,
      660
    ]
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Bot Detection",
    "compactName": "botDetection",
    "type": "BOT",
    "includeRepeatedEventsWithoutSdk": true,
    "default": {
      "result": {
        "level": "MEDIUM",
        "type": "VALUE"
      }
    },
    "excludedDetectionRules": [
      610,
      660
    ]
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
```

```python
import requests
import json

url = "{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}"

payload = json.dumps({
  "name": "Bot Detection",
  "compactName": "botDetection",
  "type": "BOT",
  "includeRepeatedEventsWithoutSdk": True,
  "default": {
    "result": {
      "level": "MEDIUM",
      "type": "VALUE"
    }
  },
  "excludedDetectionRules": [
    610,
    660
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("PUT", url, headers=headers, data=payload)

print(response.text)
```

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n    "name": "Bot Detection",\n    "compactName": "botDetection",\n    "type": "BOT",\n    "includeRepeatedEventsWithoutSdk": true,\n    "default": {\n        "result": {\n            "level": "MEDIUM",\n            "type": "VALUE"\n        }\n    },\n    "excludedDetectionRules": [\n        610,\n        660\n    ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
```

```ruby
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "Bot Detection",
  "compactName": "botDetection",
  "type": "BOT",
  "includeRepeatedEventsWithoutSdk": true,
  "default": {
    "result": {
      "level": "MEDIUM",
      "type": "VALUE"
    }
  },
  "excludedDetectionRules": [
    610,
    660
  ]
})

response = http.request(request)
puts response.read_body
```

```swift
let parameters = "{\n    \"name\": \"Bot Detection\",\n    \"compactName\": \"botDetection\",\n    \"type\": \"BOT\",\n    \"includeRepeatedEventsWithoutSdk\": true,\n    \"default\": {\n        \"result\": {\n            \"level\": \"MEDIUM\",\n            \"type\": \"VALUE\"\n        }\n    },\n    \"excludedDetectionRules\": [\n        610,\n        660\n    ]\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/v1/environments/{{envID}}/riskPredictors/{{botDetectionPredictorID}}")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "PUT"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()
```

### Example Response

200 OK

```json
{
    "_links": {
        "self": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/riskPredictors/7579bcfa-cc13-064b-364e-151ff8bb918d"
        },
        "environment": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "7579bcfa-cc13-064b-364e-151ff8bb918d",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "createdAt": "2021-05-12T13:11:50.960Z",
    "createdBy": "SYSTEM_GENERATED",
    "updatedAt": "2026-05-21T09:17:12.100Z",
    "name": "Bot Detection",
    "compactName": "botDetection",
    "licensed": true,
    "excludedDetectionRules": [
        610,
        660
    ],
    "includeRepeatedEventsWithoutSdk": true,
    "type": "BOT",
    "tooltip": "predictor.tooltip.bot",
    "condition": {
        "scores": [
            {
                "name": "HIGH",
                "value": "HIGH"
            },
            {
                "name": "MEDIUM",
                "value": "MEDIUM"
            },
            {
                "name": "LOW",
                "value": "LOW"
            }
        ]
    },
    "deletable": false,
    "default": {
        "weight": 5,
        "score": 80,
        "result": {
            "level": "MEDIUM",
            "type": "VALUE"
        },
        "evaluated": true
    }
}
```
