# Update a business ruleset

> For the complete machine-readable documentation index, see [llms.txt](https://apidocs.chargebee.com/llms.txt).


[Idempotency Supported](/docs/api/idempotency)

Updates a business ruleset. Passing `rules` replaces the entire membership of the ruleset. To change membership incrementally, use [Add business rules to a ruleset](/docs/api/business_rulesets/add-business-rules-to-a-ruleset) or [Remove business rules from a ruleset](/docs/api/business_rulesets/remove-business-rules-from-a-ruleset) instead.

Use this operation to rename a ruleset, to change the strategy in `execute_mode`, or to set the membership and priorities of the ruleset in one call.

### Prerequisites & Constraints

Each rule referenced in `rules` must already exist.

### Impacts

**

Business ruleset

**

The attributes you pass are updated, and `updated_at` and `updated_by` are set. When `rules` is passed, the membership of the ruleset becomes exactly the rules listed: rules that are not in the list are removed from the ruleset, and the priorities of the remaining rules are set from the list.

A rule dropped from the membership this way is not deleted. It remains available to other rulesets and can still be applied on its own.

### Implementation Notes

Read the current membership with [List rules in a business ruleset](/docs/api/business_rulesets/list-rules-in-a-business-ruleset) before passing `rules`, so that you do not drop a rule you meant to keep.

## Sample Request

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/business_rulesets/quote_create_rules \
     -u {site_api_key}:\
     -d name="Quote creation rules" \
     -d execute_mode="STOP_ON_FIRST_TRUE" \
     -d rules='[{"rule_id":"custom-uuid-1","priority":1},{"rule_id":"custom-uuid-2","priority":2}]'
```

#### .NET

```dotnet
using ChargeBee.Api;
using ChargeBee.Models;
using Newtonsoft.Json.Linq;

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = BusinessRuleset.Update("quote_create_rules")
		.Name("Quote creation rules")
		.ExecuteMode(BusinessRuleset.ExecuteModeEnum.StopOnFirstTrue)
		.Rules(new JArray { new JObject { ["rule_id"] = "custom-uuid-1", ["priority"] = 1 }, new JObject { ["rule_id"] = "custom-uuid-2", ["priority"] = 2 } })
		.Request();

BusinessRuleset businessRuleset = result.BusinessRuleset;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    businessrulesetAction "github.com/chargebee/chargebee-go/v3/actions/businessruleset"
    "github.com/chargebee/chargebee-go/v3/models/businessruleset"
    businessRulesetEnum "github.com/chargebee/chargebee-go/v3/models/businessruleset/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := businessrulesetAction.Update("quote_create_rules", &businessruleset.UpdateRequestParams{
        Name : "Quote creation rules",
        ExecuteMode : businessRulesetEnum.ExecuteModeStopOnFirstTrue,
        Rules : []*businessruleset.UpdateRuleParams{
            {
                RuleId : "custom-uuid-1",
                Priority : chargebee.Int32(1),
            },
            {
                RuleId : "custom-uuid-2",
                Priority : chargebee.Int32(2),
            },
        },
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        BusinessRuleset := res.BusinessRuleset
    }
}
```

#### Go

```go
package main

import (
  "fmt"
  "github.com/chargebee/chargebee-go/v4"
)

func main() {
  config := &chargebee.ClientConfig{
    SiteName: "{site}",
    ApiKey: "{site_api_key}",
  }    
  client := chargebee.NewClient(config)
  req := &chargebee.BusinessRulesetUpdateRequest{
    Name : "Quote creation rules",
    ExecuteMode : chargebee.BusinessRulesetExecuteModeStopOnFirstTrue,
    Rules : []*chargebee.BusinessRulesetUpdateRule{
        {
            RuleId : "custom-uuid-1",
            Priority : chargebee.Int32(1),
        },
        {
            RuleId : "custom-uuid-2",
            Priority : chargebee.Int32(2),
        },
    },
}
  res, err := client.BusinessRuleset.Update("quote_create_rules", req)
      if err != nil {
        fmt.Println(err)
    } else {
        BusinessRuleset := res.BusinessRuleset
    }
}
```

#### Java

```java
import com.chargebee.*;
import com.chargebee.ListResult;
import com.chargebee.models.*;
import com.chargebee.models.enums.*;
import java.io.IOException;
import java.util.List;
import com.chargebee.org.json.JSONArray;
import com.chargebee.org.json.JSONObject;

public class Sample {

    public static void main(String args[]) throws IOException, Exception {
        Environment.configure("{site}", "{site_api_key}");
        Result result = BusinessRuleset.update("quote_create_rules")
            .name("Quote creation rules")
            .executeMode(BusinessRuleset.ExecuteMode.STOP_ON_FIRST_TRUE)
            .rules(new JSONArray("[{\"rule_id\":\"custom-uuid-1\",\"priority\":1},{\"rule_id\":\"custom-uuid-2\",\"priority\":2}]"))
            .request();

        BusinessRuleset businessRuleset = result.businessRuleset();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.businessRuleset.BusinessRuleset;
import com.chargebee.v4.models.businessRuleset.params.BusinessRulesetUpdateParams;
import com.chargebee.v4.models.businessRuleset.responses.BusinessRulesetUpdateResponse;
import java.util.List;

public class BusinessRulesetUpdate {

    public static void main(String[] args) {
        ChargebeeClient client = ChargebeeClient.builder()
            .apiKey("{site_api_key}")
            .siteName("{site}")
            .build();

        BusinessRulesetUpdateParams params = BusinessRulesetUpdateParams.builder()
            .name("Quote creation rules")
            .executeMode(BusinessRulesetUpdateParams.ExecuteMode.STOP_ON_FIRST_TRUE)
            .rules(List.of("[{\"rule_id\":\"custom-uuid-1\",\"priority\":1},{\"rule_id\":\"custom-uuid-2\",\"priority\":2}]"))
            .build();

        BusinessRulesetUpdateResponse response = client
            .businessRulesets()
            .update("quote_create_rules", params);

        BusinessRuleset businessRuleset = response.getBusinessRuleset();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

const chargebee = new Chargebee({
    site: "{site}",
    apiKey: "{site_api_key}",
});

try {
    const result = await chargebee.businessRuleset.update("quote_create_rules", {
        name: "Quote creation rules",
        execute_mode: "stop_on_first_true",
        rules: [
            {
                rule_id: "custom-uuid-1",
                priority: 1
            },
            {
                rule_id: "custom-uuid-2",
                priority: 2
            }
        ]
    });

    console.log(result);
    const businessRuleset = result.business_ruleset;
} catch (err) {
    console.log(err);
}
```

#### PHP

```php
<?php

require __DIR__ . '/vendor/autoload.php';

use Chargebee\ChargebeeClient;

$chargebee = new ChargebeeClient(options: [
    "site" => "{site}",
    "apiKey" => "{site_api_key}",
]);
$result = $chargebee->businessRuleset()->update("quote_create_rules", [
    "name" => "Quote creation rules",
    "execute_mode" => "stop_on_first_true",
    "rules" => [
        [
            "rule_id" => "custom-uuid-1",
            "priority" => 1
        ],
        [
            "rule_id" => "custom-uuid-2",
            "priority" => 2
        ]
    ]
]);
$businessRuleset = $result->business_ruleset;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.BusinessRuleset.update("quote_create_rules",
    cb_client.BusinessRuleset.UpdateParams(
        name="Quote creation rules",
        execute_mode=chargebee.BusinessRuleset.ExecuteMode.STOP_ON_FIRST_TRUE,
        rules=[
            cb_client.BusinessRuleset.UpdateRuleParams(
              rule_id="custom-uuid-1",
              priority=1
            ),
            cb_client.BusinessRuleset.UpdateRuleParams(
              rule_id="custom-uuid-2",
              priority=2
            )
        ]
    )
)
business_ruleset = response.business_ruleset
```

#### Ruby

```ruby
require 'chargebee'

ChargeBee.configure(:site => "{site}",
  :api_key => "{site_api_key}")

result = ChargeBee::BusinessRuleset.update("quote_create_rules",{
  :name => "Quote creation rules",
  :execute_mode => "STOP_ON_FIRST_TRUE",
  :rules => "[{\"rule_id\":\"custom-uuid-1\",\"priority\":1},{\"rule_id\":\"custom-uuid-2\",\"priority\":2}]"
})

business_ruleset = result.business_ruleset
```

## Sample Response

```json
{
  "business_ruleset": {
    "id": "quote_create_rules",
    "name": "Quote creation rules",
    "description": "Rules evaluated when a quote is created.",
    "active": true,
    "execute_mode": "stop_on_first_true",
    "updated_at": 1788597182,
    "updated_by": "full_access_key_v1",
    "created_by": "full_access_key_v1",
    "created_at": 1788510782,
    "resource_version": 1788597182412,
    "object": "business_ruleset"
  }
}
```

## URL Format

**POST** https://[site].chargebee.com/api/v2/business_rulesets/{business-ruleset-id}

## Input Parameters

- `name` (required, string, max chars=500)
  Display name of the business ruleset. Include it even when you are only changing another attribute, such as `execute_mode`.

- `description` (optional, string, max chars=1000)
  Description of what the business ruleset does.

- `execute_mode` (optional, enumerated string, default=execute_all)
  Strategy that determines how the rules in the ruleset are evaluated and when evaluation stops.
  Possible enum values:
    - `stop_on_first_true`
      Evaluation stops as soon as a rule evaluates to `true`. The rules that come later in the evaluation order are not evaluated.
    - `stop_on_first_false`
      Evaluation stops as soon as a rule evaluates to `false`. The rules that come later in the evaluation order are not evaluated.
    - `execute_all`
      Every rule in the ruleset is evaluated and all the results are returned. This is the default.
    - `execute_all_true`
      Every rule in the ruleset is evaluated, and only the rules that evaluated to `true` are returned.

- `rules` (optional)
  The [business rules](/docs/api/business_rules) that make up the ruleset, along with the priorities that determine their positions in its evaluation order. Each entry takes the `rule_id` of an existing business rule and an optional `priority`; when `priority` is omitted, it is assigned from the position of the entry in the array. Pass the list as a JSON array.
  
  **Constraints**
  
  -   Passing this parameter replaces the entire membership of the ruleset. To change the membership incrementally, use [Add business rules to a ruleset](/docs/api/business_rulesets/add-business-rules-to-a-ruleset) or [Remove business rules from a ruleset](/docs/api/business_rulesets/remove-business-rules-from-a-ruleset) instead.
  -   Each `rule_id` must belong to a business rule that already exists, and can appear only once in the list.
  -   A `priority` can be used by only one rule in the ruleset. Two entries that carry the same `priority` are rejected.
  
  **Example →** `rules = [{"rule_id":"custom-uuid-1","priority":1},{"rule_id":"custom-uuid-2","priority":2}]`

## Returns

- `business_ruleset` (Business ruleset object)
  The updated business ruleset. When `rules` was passed, its membership is exactly the rules listed and the priorities of those rules are set from the list.
