Documentation Index
Fetch the complete documentation index at: https://confidence.spotify.com/llms.txt
Use this file to discover all available pages before exploring further.
Create rules to assign variants to users in a segment.
See Rules and Variant Assignment in the reference for details on how rules work, assignment types, and best practices.
Before You Begin
Before creating a rule, you need:
- A flag with a defined schema and variants
- An allocated segment that defines your target audience
Create a Basic Rule
Assign all users in a segment to a single variant:
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/all-users",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"variant": {
"variant": "flags/example-flag/variants/enabled"
},
"bucketRanges": [{"lower": 0, "upper": 100}]
}
]
},
"targetingKeySelector": "user_id"
}'
Create an A/B Test Rule
Randomly assign users to control or treatment (50/50 split):
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/experiment-segment",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"variant": {
"variant": "flags/example-flag/variants/control"
},
"bucketRanges": [{"lower": 0, "upper": 50}]
},
{
"variant": {
"variant": "flags/example-flag/variants/treatment"
},
"bucketRanges": [{"lower": 50, "upper": 100}]
}
]
},
"targetingKeySelector": "user_id"
}'
Create a Multi-Variant Rule
Assign users across three variants (40/30/30 split):
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/multivariate-test",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"variant": {"variant": "flags/example-flag/variants/option-a"},
"bucketRanges": [{"lower": 0, "upper": 40}]
},
{
"variant": {"variant": "flags/example-flag/variants/option-b"},
"bucketRanges": [{"lower": 40, "upper": 70}]
},
{
"variant": {"variant": "flags/example-flag/variants/option-c"},
"bucketRanges": [{"lower": 70, "upper": 100}]
}
]
},
"targetingKeySelector": "user_id"
}'
Create a Fall-Through Rule
Create a rule that matches but passes to the next rule:
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/logging-segment",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"fallthrough": {},
"bucketRanges": [{"lower": 0, "upper": 100}]
}
]
},
"targetingKeySelector": "user_id"
}'
Create a Client Default Rule
Assign users to their client-specified default values:
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/default-segment",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"clientDefault": {},
"bucketRanges": [{"lower": 0, "upper": 100}]
}
]
},
"targetingKeySelector": "user_id"
}'
Enable a Rule
Newly created rules start disabled. Enable a rule to activate it:
curl -X PATCH "https://flags.confidence.dev/v1/flags/example-flag/rules/RULE_ID?updateMask=enabled" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"enabled": true
}'
Update a Rule
Change variant assignments or the segment:
curl -X PATCH "https://flags.confidence.dev/v1/flags/example-flag/rules/RULE_ID?updateMask=assignmentSpec" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"variant": {"variant": "flags/example-flag/variants/control"},
"bucketRanges": [{"lower": 0, "upper": 30}]
},
{
"variant": {"variant": "flags/example-flag/variants/treatment"},
"bucketRanges": [{"lower": 30, "upper": 100}]
}
]
}
}'
Reorder Rules
Change rule evaluation order by updating priority (lower numbers evaluate first):
curl -X PATCH "https://flags.confidence.dev/v1/flags/example-flag/rules/RULE_ID?updateMask=priority" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"priority": 1
}'
Delete a Rule
Remove a rule from a flag:
curl -X DELETE "https://flags.confidence.dev/v1/flags/example-flag/rules/RULE_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Use a Custom Targeting Key
Specify a different field for randomization (for example, device instead of user):
curl -X POST "https://flags.confidence.dev/v1/flags/example-flag/rules" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"segment": "segments/all-users",
"assignmentSpec": {
"bucketCount": 100,
"assignments": [
{
"variant": {"variant": "flags/example-flag/variants/enabled"},
"bucketRanges": [{"lower": 0, "upper": 100}]
}
]
},
"targetingKeySelector": "device_id"
}'
Next Steps
After creating rules:
- Resolve flags to test your rules with different evaluation contexts
- Apply flags to track which users see which variants
- Monitor your experiments and adjust rules as needed