Skip to main content

Manage feature flags and rollout rules

Goal

This guide explains how to manage the lifecycle of a feature flag using the Automation API.

To configure your first flag, complete the following steps:

  1. Create a feature flag using the create a new feature flag endpoint.
  2. Add a rollout rule to the development environment using the update a feature flag configuration endpoint.
  3. Update the rollout rule using the update a single rule by ID endpoint.

Requirements

Prerequisites

Before you use the Automation API, ensure you have the following information:

Access token

To authenticate your requests, you need an access token. Follow the instructions in Obtaining an access token to obtain one.

siteCode

To find your siteCode go to Admin > Projects in the bottom left corner

SiteID

1. Create a feature flag

Create a feature flag called test_feature_flag_post, for example, with the variable test_variable.

Because this request does not specify environmentConfigurations, the system automatically generates configurations for the development, staging, and production environments.

Endpoint:

POST https://api.kameleoon.com/feature-flags

See the Create a new feature flag endpoint.

Example:

curl -L -X POST 'https://api.kameleoon.com/feature-flags' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
"featureKey": "test_feature_flag_post",
"name": "test_feature_flag_post",
"siteCode": "pzllysfw2f",
"description": "",
"tags": [],
"variables": [
{
"key": "test_variable",
"type": "STRING",
"value": "test"
}
],
"variations": [
{
"name": "On",
"key": "on",
"variables": [
{
"key": "test_variable",
"type": "STRING",
"value": "test"
}
]
},
{
"name": "Off",
"key": "off",
"variables": [
{
"key": "test_variable",
"type": "STRING",
"value": "test"
}
]
}
],
"attributionWindow": 604800000,
"archived": false
}
'

Response:

{
"id": 13134,
"siteCode": "pzllysfw2f",
"featureKey": "test_feature_flag_post",
"name": "test_feature_flag_post",
"description": "",
"tags": [],
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
],
"variations": [
{
"name": "On",
"key": "on",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
},
{
"name": "Off",
"key": "off",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
}
],
"secondaryGoalIds": [],
"attributionWindow": 604800000,
"health": "HEALTHY",
"dateCreated": "2025-12-17T10:42:14",
"dateModified": "2025-12-17T10:42:14",
"dateContentModified": "2025-12-17T10:42:14",
"environmentConfigurations": [
{
"environmentKey": "production",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "staging",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "development",
"featureEnabled": true,
"defaultVariationKey": "on",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
}
],
"createdById": 34255,
"archived": false
}

2. Update the feature flag

Update the feature flag to add a TARGETED_DELIVERY rollout rule to the development environment with the following configuration:

Endpoint:

PATCH https://api.kameleoon.com/feature-flags/:siteCode/:featureKey

See the Update a feature flag configuration endpoint.

Example:

curl -L -X PATCH 'https://api.kameleoon.com/feature-flags/pzllysfw2f/test_feature_flag_post' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
"environmentConfigurations": [
{
"environmentKey": "development",
"featureEnabled": true,
"defaultVariationKey": "on",
"rolloutRules": [
{
"name": "test rollout rule",
"type": "TARGETED_DELIVERY",
"variations": [],
"trafficAllocations": [
{
"variationKey": "on",
"exposition": 59.0
}
],
"reallocationTimestamp": null,
"release": {
"releaseFrom": "2025-12-11T11:58:01",
"releaseTo": "2025-12-13T11:58:01",
"timeZone": "Europe/Paris"
},
"state": "ACTIVE",
"rollbackConditions": [
{
"target": "RULE",
"criteria": "CONVERSION_RATE",
"comparisonOperator": "GREATER_THAN",
"matchValue": 20.0,
"goalId": 400899,
"visitors": 2,
"recipients": []
}
],
"segmentId": 403694,
"exposition": 59,
"variationKey": "on"
}
],
"integrations": {
"deliveryRules": [],
"experimentRules": []
}
}
]
}'

Response:

{
"id": 13134,
"siteCode": "pzllysfw2f",
"featureKey": "test_feature_flag_post",
"name": "test_feature_flag_post",
"description": "",
"tags": [],
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
],
"variations": [
{
"name": "On",
"key": "on",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
},
{
"name": "Off",
"key": "off",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
}
],
"secondaryGoalIds": [],
"attributionWindow": 604800000,
"health": "HEALTHY",
"dateCreated": "2025-12-17T10:42:14",
"dateModified": "2025-12-17T10:42:14",
"dateContentModified": "2025-12-17T10:42:14",
"environmentConfigurations": [
{
"environmentKey": "production",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "staging",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "development",
"featureEnabled": true,
"defaultVariationKey": "on",
"rolloutRules": [
{
"id": 20557,
"name": "test rollout rule",
"type": "TARGETED_DELIVERY",
"experimentId": 354972,
"variations": [],
"trafficAllocations": [{ "variationKey": "on", "exposition": 59.0 }],
"reallocationTimestamp": null,
"release": {
"releaseFrom": "2025-12-11T11:58:01",
"releaseTo": "2025-12-13T11:58:01",
"timeZone": "Europe/Paris"
},
"status": "PAUSED",
"state": "ACTIVE",
"rollbackConditions": [
{
"id": 648,
"target": "RULE",
"criteria": "CONVERSION_RATE",
"comparisonOperator": "GREATER_THAN",
"matchValue": 20.0,
"goalId": 400899,
"visitors": 2,
"recipients": []
}
],
"segmentId": 403694,
"exposition": 59,
"variationKey": "on"
}
],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
}
],
"createdById": 34255,
"archived": false
}

3. Update the rollout rule

Finally, change the matchValue of rollbackConditions to 25 for the rollout rule using its ID (20557).

Endpoint:

PATCH https://api.kameleoon.com/feature-flags/rules/:ruleId

See the Update a feature flag configuration endpoint.

Example:

curl -L -X PATCH 'https://api.kameleoon.com/rules/20557' \
-H 'Content-Type: application/json' \
-H 'Accept: */*' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
"rollbackConditions": [
{
"id": 648,
"target": "RULE",
"criteria": "CONVERSION_RATE",
"comparisonOperator": "GREATER_THAN",
"matchValue": 25.0,
"goalId": 400899,
"visitors": 2,
"recipients": []
}
]
}'

Response:

{
"id": 13134,
"siteCode": "pzllysfw2f",
"featureKey": "test_feature_flag_post",
"name": "test_feature_flag_post",
"description": "",
"tags": [],
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
],
"variations": [
{
"name": "On",
"key": "on",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
},
{
"name": "Off",
"key": "off",
"variables": [
{ "key": "test_variable", "type": "STRING", "value": "test" }
]
}
],
"secondaryGoalIds": [],
"attributionWindow": 604800000,
"health": "HEALTHY",
"dateCreated": "2025-12-17T10:42:14",
"dateModified": "2025-12-17T10:42:14",
"dateContentModified": "2025-12-17T10:42:14",
"environmentConfigurations": [
{
"environmentKey": "production",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "staging",
"featureEnabled": false,
"defaultVariationKey": "off",
"rolloutRules": [],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
},
{
"environmentKey": "development",
"featureEnabled": true,
"defaultVariationKey": "on",
"rolloutRules": [
{
"id": 20557,
"name": "test rollout rule",
"type": "TARGETED_DELIVERY",
"experimentId": 354972,
"variations": [],
"trafficAllocations": [{ "variationKey": "on", "exposition": 59.0 }],
"reallocationTimestamp": null,
"release": {
"releaseFrom": "2025-12-11T11:58:01",
"releaseTo": "2025-12-13T11:58:01",
"timeZone": "Europe/Paris"
},
"status": "PAUSED",
"state": "ACTIVE",
"rollbackConditions": [
{
"id": 648,
"target": "RULE",
"criteria": "CONVERSION_RATE",
"comparisonOperator": "GREATER_THAN",
"matchValue": 25.0,
"goalId": 400899,
"visitors": 2,
"recipients": []
}
],
"segmentId": 403694,
"exposition": 59,
"variationKey": "on"
}
],
"integrations": { "deliveryRules": [], "experimentRules": [] },
"dateModified": "2025-12-17T10:42:14"
}
],
"createdById": 34255,
"archived": false
}