# Weight Threshold Configuration Anubis offers the ability to assign "weight" to requests. This is a custom level of suspicion that rules can add to or remove from. For example, here's how you assign 10 weight points to anything that might be a browser: ```yaml # botPolicies.yaml bots: - name: generic-browser user_agent_regex: >- Mozilla|Opera action: WEIGH weight: adjust: 10 ``` Thresholds let you take this per-request weight value and take actions in response to it. Thresholds are defined alongside your bot configuration in `botPolicies.yaml`. :::note Thresholds DO NOT apply when a request matches a bot rule with the CHALLENGE action. Thresholds only apply when requests don't match any terminal bot rules. ::: ```yaml # botPolicies.yaml bots: ... thresholds: - name: minimal-suspicion expression: weight < 0 action: ALLOW - name: mild-suspicion expression: all: - weight >= 0 - weight < 10 action: CHALLENGE challenge: algorithm: metarefresh difficulty: 1 report_as: 1 - name: moderate-suspicion expression: all: - weight >= 10 - weight < 20 action: CHALLENGE challenge: algorithm: fast difficulty: 2 report_as: 2 - name: extreme-suspicion expression: weight >= 20 action: CHALLENGE challenge: algorithm: fast difficulty: 4 report_as: 4 ``` This defines a suite of 4 thresholds: 1. If the request weight is less than zero, allow it through. 2. If the request weight is greater than or equal to zero, but less than ten: give it [a very lightweight challenge](./challenges/metarefresh.mdx). 3. If the request weight is greater than or equal to ten, but less than twenty: give it [a slightly heavier challenge](./challenges/proof-of-work.mdx). 4. Otherwise, give it [the heaviest challenge](./challenges/proof-of-work.mdx). Thresholds can be configured with the following options:
| Name | Description | Example |
|---|---|---|
| `name` | The human-readable name for this threshold. | ```yaml name: extreme-suspicion ``` |
| `expression` | A [CEL](https://cel.dev/) expression taking the request weight and returning true or false | To check if the request weight is less than zero: ```yaml expression: weight < 0 ``` To check if it's between 0 and 10 (inclusive): ```yaml expression: all: - weight >= 0 - weight < 10 ``` |
| `action` | The Anubis action to apply: `ALLOW`, `CHALLENGE`, or `DENY` | ```yaml action: ALLOW ``` If you set the CHALLENGE action, you must set challenge details: ```yaml action: CHALLENGE challenge: algorithm: metarefresh difficulty: 1 report_as: 1 ``` |