DevCycle Variations API
The Variations API from DevCycle — 2 operation(s) for variations.
The Variations API from DevCycle — 2 operation(s) for variations.
openapi: 3.1.0
info:
title: DevCycle Bucketing Audiences Variations API
description: Documents the DevCycle Bucketing API which provides an API interface to User Bucketing and for Server SDKs configured to use Cloud Bucketing.
version: 1.3.0
servers:
- url: https://bucketing-api.devcycle.com/
tags:
- name: Variations
paths:
/v1/projects/{project}/features/{feature}/variations:
post:
operationId: VariationsController_create
summary: Create a Feature Variation
description: Create a new variation within a Feature
parameters:
- name: project
required: true
in: path
description: A Project key or ID
schema:
type: string
- name: feature
required: true
in: path
description: A Feature key or ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FeatureVariationDto'
responses:
'201':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Feature'
'400':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: ''
'403':
description: ''
'404':
description: ''
'409':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ConflictErrorResponse'
'412':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PreconditionFailedErrorResponse'
tags:
- Variations
get:
operationId: VariationsController_findAll
summary: List Feature Variations
description: Get a list of variations for a feature
parameters:
- name: feature
required: true
in: path
description: A Feature key or ID
schema:
type: string
- name: project
required: true
in: path
description: A Project key or ID
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Variation'
'401':
description: ''
'404':
description: ''
tags:
- Variations
/v1/projects/{project}/features/{feature}/variations/{key}:
get:
operationId: VariationsController_findOne
summary: Get a Feature Variation
description: Get a variation by ID or key
parameters:
- name: key
required: true
in: path
description: A Variation key or ID
schema:
type: string
- name: feature
required: true
in: path
description: A Feature key or ID
schema:
type: string
- name: project
required: true
in: path
description: A Project key or ID
schema:
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Variation'
'401':
description: ''
'404':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
tags:
- Variations
patch:
operationId: VariationsController_update
summary: Update a Feature Variation
description: Update a variation by ID or key
parameters:
- name: key
required: true
in: path
description: A Feature key or ID
schema:
type: string
- name: feature
required: true
in: path
description: A Feature key or ID
schema:
type: string
- name: project
required: true
in: path
description: A Project key or ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateFeatureVariationDto'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/Feature'
'400':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestErrorResponse'
'401':
description: ''
'403':
description: ''
'404':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundErrorResponse'
'409':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ConflictErrorResponse'
tags:
- Variations
components:
schemas:
AudienceOperatorWithAudienceMatchFilter:
type: object
properties:
filters:
type: array
description: Filters to apply using the "operator" operation
items:
anyOf:
- $ref: '#/components/schemas/AllFilter'
- $ref: '#/components/schemas/UserFilter'
- $ref: '#/components/schemas/UserCountryFilter'
- $ref: '#/components/schemas/UserAppVersionFilter'
- $ref: '#/components/schemas/UserPlatformVersionFilter'
- $ref: '#/components/schemas/UserCustomFilter'
- $ref: '#/components/schemas/AudienceMatchFilter'
operator:
description: Operator type if this object represents an operator, and not a filter
enum:
- and
- or
type: string
required:
- filters
- operator
VariableValidationEntity:
type: object
properties:
schemaType:
type: object
enumValues:
type: object
regexPattern:
type: string
jsonSchema:
type: string
description:
type: string
exampleValue:
type: object
required:
- schemaType
- description
- exampleValue
FeatureSummary:
type: object
properties:
maintainers:
description: Auth0 maintainers of this feature
type: array
items:
type: string
links:
type: array
items:
$ref: '#/components/schemas/Link'
markdown:
type: string
required:
- maintainers
- links
- markdown
FeatureSettings:
type: object
properties:
publicName:
type: string
maxLength: 100
minLength: 1
publicDescription:
type: string
maxLength: 1000
optInEnabled:
type: boolean
required:
- publicName
- publicDescription
- optInEnabled
Variable:
type: object
properties:
name:
type: string
description: Variable name
example: Show New Dashboard
maxLength: 100
minLength: 1
description:
type: string
description: A description of the Variable
example: A boolean variable that will toggle the new dashboard feature
maxLength: 1000
key:
type: string
description: 'Unique Variable identifier, can be used in the SDK / API to reference by key rather then ID.
Must only contain lower-case characters and `_`, `-` or `.`.'
example: show-new-dashboard
minLength: 1
maxLength: 100
pattern: ^[a-z0-9-_.]+$
_id:
type: string
description: A unique Variable ID
example: 61450f3daec96f5cf4a49946
_project:
type: string
description: The ID of the Project this Variable belongs to
_feature:
type: string
description: The ID of the Feature this Variable belongs to
example: 61450f3daec96f5cf4a49947
type:
description: The type of Variable. Must be one of [String | Boolean | Number | JSON]
example: Boolean
enum:
- String
- Boolean
- Number
- JSON
type: string
status:
description: The status of a Variable. Must be one of [active | archived]
example: active
enum:
- active
- archived
type: string
source:
description: The system that was used for the creation of the Variable.
example: api
enum:
- api
- dashboard
- importer
- github.code_usages
- github.pr_insights
- gitlab.code_usages
- gitlab.pr_insights
- bitbucket.code_usages
- bitbucket.pr_insights
- terraform
- cli
- slack
- mcp
type: string
_createdBy:
type: string
description: ID of the User who created the Variable.
createdAt:
format: date-time
type: string
description: The date the Variable was created
updatedAt:
format: date-time
type: string
description: The date the Variable was last updated
validationSchema:
description: Validation schema for variable values
allOf:
- $ref: '#/components/schemas/VariableValidationEntity'
persistent:
type: boolean
description: Boolean indicating if the variable is intended to be long-lived within a feature
tags:
description: Tags to organize Variables on the dashboard
example:
- Dashboard
- QA
type: array
items:
type: string
required:
- key
- _id
- _project
- type
- status
- source
- createdAt
- updatedAt
UserCustomFilter:
type: object
properties:
comparator:
description: Comparator to use
example: '>='
enum:
- '='
- '!='
- '>'
- '>='
- <
- <=
- exist
- '!exist'
- contain
- '!contain'
- startWith
- '!startWith'
- endWith
- '!endWith'
type: string
dataKey:
type: string
description: Data Key used for custom data
example: my_custom_prop
minLength: 1
dataKeyType:
description: Data Key Type used for custom data
example: Number
enum:
- String
- Boolean
- Number
type: string
values:
type: object
description: An array of values is required for all filters except when the comparator is 'exist' or '!exist'
example:
- 0
type:
type: string
description: Filter type of this audience
example: user
default: user
enum:
- user
subType:
type: string
description: Sub type of this filter
example: customData
default: customData
enum:
- customData
required:
- comparator
- dataKey
- dataKeyType
- type
- subType
NotFoundErrorResponse:
type: object
properties:
statusCode:
type: number
description: Response status code
example: 404
message:
type: object
description: Error details
example: Item with key 'key-123' not found
error:
type: string
description: Error type
example: Not Found
required:
- statusCode
- message
- error
ConflictErrorResponse:
type: object
properties:
statusCode:
type: number
description: Response status code
example: 409
message:
type: object
description: Error details
example: Duplicate key 'key-123'
error:
type: string
description: Error type
example: Conflict
errorType:
type: string
example: ERR_DUPE_FEATURE_KEY
required:
- statusCode
- message
- error
- errorType
BadRequestErrorResponse:
type: object
properties:
statusCode:
type: number
description: Response status code
example: 400
message:
type: object
description: Error details
example:
- key should not be empty
error:
type: string
description: Error type
example: Bad Request
required:
- statusCode
- message
- error
Link:
type: object
properties:
url:
type: string
title:
type: string
required:
- url
- title
FeatureSDKVisibility:
type: object
properties:
mobile:
type: boolean
client:
type: boolean
server:
type: boolean
required:
- mobile
- client
- server
TargetAudience:
type: object
properties:
name:
type: string
description: Audience display name, must be set for project-level audiences.
example: Android Users
maxLength: 100
minLength: 1
filters:
description: Audience filters, describing logic for segmenting users
allOf:
- $ref: '#/components/schemas/AudienceOperatorWithAudienceMatchFilter'
required:
- filters
UserPlatformVersionFilter:
type: object
properties:
comparator:
description: Comparator to use
example: '>'
enum:
- '='
- '!='
- '>'
- '>='
- <
- <=
- exist
- '!exist'
type: string
values:
description: An array of values is required for all filters except when the comparator is 'exist' or '!exist'
example:
- 1.0.2
type: array
items:
type: string
type:
type: string
description: Filter type of this audience
example: user
default: user
enum:
- user
subType:
type: string
description: Sub type of this filter
example: appVersion
default: appVersion
enum:
- appVersion
required:
- comparator
- type
- subType
FeatureCustomStatus:
type: object
properties:
_status:
type: string
description: Custom status ID reference
updatedAt:
format: date-time
type: string
description: Timestamp when the custom status was last updated
FeatureStaleness:
type: object
properties: {}
UserCountryFilter:
type: object
properties:
subType:
description: Sub type of this filter
example: country
enum:
- country
type: string
default: country
comparator:
description: Comparator to use
example: '!='
enum:
- '='
- '!='
- exist
- '!exist'
- contain
- '!contain'
- startWith
- '!startWith'
- endWith
- '!endWith'
type: string
values:
description: An array of values is required for all filters except when the comparator is 'exist' or '!exist'
example:
- CA
- US
type: array
items:
type: string
type:
type: string
description: Filter type of this audience
example: user
default: user
enum:
- user
required:
- subType
- comparator
- type
UserFilter:
type: object
properties:
subType:
description: Sub type of this filter
example: email
enum:
- user_id
- email
- platform
- deviceModel
type: string
comparator:
description: Comparator to use
example: '!='
enum:
- '='
- '!='
- exist
- '!exist'
- contain
- '!contain'
- startWith
- '!startWith'
- endWith
- '!endWith'
type: string
values:
description: An array of values is required for all filters except when the comparator is 'exist' or '!exist'
example:
- baduser@email.com
type: array
items:
type: string
type:
type: string
description: Filter type of this audience
example: user
default: user
enum:
- user
required:
- subType
- comparator
- type
Target:
type: object
properties:
_id:
type: string
description: A unique Target ID
example: 61450f3daec96f5cf4a49946
name:
type: string
description: Target name
example: Feature Enabled
audience:
description: Audience model describing target segmentation.
allOf:
- $ref: '#/components/schemas/TargetAudience'
rollout:
description: Rollout sub-document describing how a Target's audience is rolled out
allOf:
- $ref: '#/components/schemas/Rollout'
distribution:
description: Specifies variation distribution percentages for features
type: array
items:
$ref: '#/components/schemas/TargetDistribution'
bucketingKey:
type: string
description: String to bucket users into a specific variation
example: '''organization_id'
required:
- _id
- audience
- distribution
Rollout:
type: object
properties:
startPercentage:
type: number
description: Rollout start percentage
minimum: 0
maximum: 1
type:
type: string
description: Type of rollout
enum:
- schedule
- gradual
- stepped
startDate:
format: date-time
type: string
description: Date to start rollout
stages:
description: Stages of rollout
type: array
items:
$ref: '#/components/schemas/RolloutStage'
required:
- type
- startDate
FeatureVariationDto:
type: object
properties:
key:
type: string
description: 'Unique key by Feature, can be used in the SDK / API to reference by ''key'' rather than _id.
Must only contain lower-case characters and `_`, `-` or `.`.'
example: variation-1
minLength: 1
maxLength: 100
pattern: ^[a-z0-9-_.]+$
name:
type: string
description: Variation display name.
example: User's with dashboard access
maxLength: 100
minLength: 1
variables:
type: object
description: A key-value map of variables to their value for this variation
additionalProperties:
anyOf:
- type: string
- type: number
- type: boolean
- type: array
- type: object
example:
show-new-dashboard: true
string-var: hello world
bool-var: true
num-var: 99
json-var:
foo: bar
required:
- key
- name
FeatureConfig:
type: object
properties:
_feature:
type: string
description: ID of the Feature owning the Configuration
example: 61450f3daec96f5cf4a49946
_environment:
type: string
description: ID of the Environment owning the Configuration
example: 61450f3daec96f5cf4a49946
_createdBy:
type: string
description: User who created the Feature Configuration
status:
description: Status of the Feature Configuration
enum:
- active
- inactive
type: string
startedAt:
format: date-time
type: string
description: Date the Feature Configuration was started
updatedAt:
format: date-time
type: string
description: The date the Feature Configuration was last updated
targets:
description: The targets to evaluate what variation a user should be delivered
type: array
items:
$ref: '#/components/schemas/Target'
readonly:
type: boolean
description: Controls whether the feature configuration is editable for a given user
hasStaticConfig:
type: boolean
description: 'Flag to indicate if the Feature owning the configuration has been marked as complete.
If true, the user targeting rules are ignored and the static variation is always used.'
required:
- _feature
- _environment
- status
- updatedAt
- targets
- readonly
- hasStaticConfig
TargetDistribution:
type: object
properties:
percentage:
type: number
description: Distribution percentage for the variation
example: 0.0005
minimum: 0
maximum: 1
_variation:
type: string
description: Variation ID or key from `feature.variations`
example: variation-1
required:
- percentage
- _variation
AuditLogEntity:
type: object
properties:
date:
format: date-time
type: string
a0_user:
type: string
changes:
type: array
items:
type: object
required:
- date
- a0_user
- changes
AllFilter:
type: object
properties:
type:
type: string
description: Filter type of this audience
default: all
enum:
- all
required:
- type
UpdateFeatureVariationDto:
type: object
properties:
key:
type: string
description: 'Unique key by Feature, can be used in the SDK / API to reference by ''key'' rather than _id.
Must only contain lower-case characters and `_`, `-` or `.`.'
example: variation-1
minLength: 1
maxLength: 100
pattern: ^[a-z0-9-_.]+$
name:
type: string
description: Variation display name.
example: User's with dashboard access
maxLength: 100
minLength: 1
variables:
type: object
description: A key-value map of variables to their value for this variation
additionalProperties:
anyOf:
- type: string
- type: number
- type: boolean
- type: array
- type: object
example:
show-new-dashboard: true
string-var: hello world
bool-var: true
num-var: 99
json-var:
foo: bar
_id:
type: string
UserAppVersionFilter:
type: object
properties:
comparator:
description: Comparator to use
example: '>'
enum:
- '='
- '!='
- '>'
- '>='
- <
- <=
- exist
- '!exist'
type: string
values:
description: An array of values is required for all filters except when the comparator is 'exist' or '!exist'
example:
- 1.0.2
type: array
items:
type: string
type:
type: string
description: Filter type of this audience
example: user
default: user
enum:
- user
subType:
type: string
description: Sub type of this filter
example: appVersion
default: appVersion
enum:
- appVersion
required:
- comparator
- type
- subType
PreconditionFailedErrorResponse:
type: object
properties:
statusCode:
type: number
description: Response status code
example: 412
message:
type: object
description: Error details
example: Variable does not belong to Feature
error:
type: string
description: Error type
example: Precondition Failed
required:
- statusCode
- message
- error
Feature:
type: object
properties:
_id:
type: string
description: A unique Feature ID
example: 61450f3daec96f5cf4a49946
_project:
type: string
description: The Project owning the Feature
source:
description: Source that created the Feature
enum:
- api
- dashboard
- importer
- github.code_usages
- github.pr_insights
- gitlab.code_usages
- gitlab.pr_insights
- bitbucket.code_usages
- bitbucket.pr_insights
- terraform
- cli
- slack
- mcp
type: string
status:
description: Status of the Feature
enum:
- active
- complete
- archived
type: string
type:
description: The Feature type
enum:
- release
- experiment
- permission
- ops
type: string
name:
type: string
description: Name of the Feature
example: New Dashboard
key:
type: string
description: 'Unique key by Project, can be used in the SDK / API to reference by ''key'' rather than _id.
Must only contain lower-case characters and `_`, `-` or `.`.'
example: new-dash
description:
type: string
description: Feature description.
example: New client-facing dashboard.
_createdBy:
type: string
description: ID of the User who created the Feature
createdAt:
format: date-time
type: string
description: The date the Feature was created
updatedAt:
format: date-time
type: string
description: The date the Feature was last updated
prodTargetingUpdatedAt:
format: date-time
type: string
description: The date the Feature had an update that impacted production targeting
variations:
description: Variation configurations to be used by feature configurations.
type: array
items:
$ref: '#/components/schemas/Variation'
controlVariation:
type: string
description: The key of the variation that is used as the control variation for Metrics
staticVariation:
type: string
description: The key of the variation that is set when the Feature's status is set to complete
variables:
description: Variable definitions to be referenced in variations
type: array
items:
$ref: '#/components/schemas/Variable'
tags:
description: Tags to organize Features on the dashboard
example:
- Dashboard
- QA
type: array
items:
type: string
ldLink:
type: string
description: A link to the feature on LaunchDarkly if it has importedByLD type
readonly:
type: boolean
description: Controls whether the feature is editable for a given user
settings:
description: Defines feature-level settings
allOf:
- $ref: '#/components/schemas/FeatureSettings'
sdkVisibility:
description: SDK Type visibility settings to filter features by platform
allOf:
- $ref: '#/components/schemas/FeatureSDKVisibility'
configurations:
description: An array of targeting configurations for the associated environments
type: array
items:
$ref: '#/components/schemas/FeatureConfig'
latestUpdate:
description: 'Most recent audit log entry for this feature
Only included in response if includeLatestUpdate query param is true'
allOf:
- $ref: '#/components/schemas/AuditLogEntity'
changeRequests:
description: Pending change requests for this Feature
type: array
items:
type: object
staleness:
description: The staleness of the feature
allOf:
- $ref: '#/components/schemas/FeatureStaleness'
customStatus:
description: Custom status reference for this feature
allOf:
- $ref: '#/components/schemas/FeatureCustomStatus'
summary:
description: Summary details for dashboard
allOf:
- $ref: '#/components/schemas/FeatureSummary'
required:
- _id
- _project
- source
- status
- name
- key
- createdAt
- updatedAt
- controlVariation
- readonly
- configurations
- summary
Variation:
type: object
properties:
key:
type: string
description: 'Unique key by Feature, can be used in the SDK / API to reference by ''key'' rather than _id.
Must only contain lower-case characters and `_`, `-` or `.`.'
example: variation-1
minLength: 1
maxLength: 100
pattern: ^[a-z0-9-_.]+$
name:
type: string
description: Variation display name.
example: User's with dashboard access
maxLength: 100
minLength: 1
variables:
type: object
description: A key-value map of variables to their value for this variation
additionalProperties:
anyOf:
- type: string
- type: number
- type: boolean
- type: array
- type: object
example:
show-new-dashboard: true
string-var: hello world
bool-var: true
num-var: 99
json-var:
foo: bar
_id:
type: string
description: A unique Variation ID
example: 61450f3daec96f5cf4a49946
required:
- key
- name
- _id
AudienceMatchFilter:
type: object
properties:
type:
type: string
default: audienceMatch
enum:
- audienceMatch
comparator:
enum:
- '='
- '!='
type: string
_audiences:
type: array
items:
type: string
required:
- type
RolloutStage:
type: object
properties:
percentage:
type: number
description: Target percentage to reach by the step date
minimum: 0
maximum: 1
type:
type: string
description: Defines the transition into this percentage level
enum:
- linear
- discrete
date:
format:
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/devcycle/refs/heads/main/openapi/devcycle-variations-api-openapi.yml