How AI is applied across API Evangelist and APIs.io. Read my AI disclosure →
API Evangelist API Evangelist
Discovery
Learnings
Guidance
Toolbox
Alignment
API Evangelist LLC

Optimizely Feature Experimentation Flags API v1

Feature Experimentation Flags v1 — flags, variations, variable definitions, rulesets, rules, holdouts, groups, custom fields, environments and reports. 55 operations, RFC 9457 problem+json errors, restfuljson.org link relations. Harvested verbatim from the provider's published OpenAPI 2026-08-13.

Optimizely Feature Experimentation Flags API v1 is one of 50 APIs that Optimizely publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

Tagged areas include Feature Flags and Experimentation. The published artifact set on APIs.io includes an OpenAPI specification, API documentation, and an API reference.

This API exposes 55 operations across 37 paths, organized into 11 resource areas, and defines 68 schemas. It is described by OpenAPI 3.0.0, at version 0.3.7.

Requests are made against a single base URL, https://api.optimizely.com/flags/v1/.

55 operations 37 paths 68 schemas 6 DELETE21 GET6 PATCH22 POST

Metadata

The identity and technical contract details declared by the specification.

Specification
OpenAPI 3.0.0
API Version
0.3.7
Base URL
https://api.optimizely.com/flags/v1
Authentication
HTTP Bearer, OAuth 2.0, HTTP Bearer
Resource Areas
11

Authentication & Security 3

Optimizely Feature Experimentation Flags API v1 declares 3 security schemes for authenticating requests. It accepts HTTP bearer tokens (BearerAuth). It supports OAuth 2.0 (OAuth2) using the authorizationCode flow, exposing 1 scope. It accepts HTTP bearer tokens (apiKey). By default, every request must be authenticated.

  • BearerAuth — To get a personal token, see https://docs.developers.optimizely.com/web/docs/personal-token
  • OAuth2 — Write applications that authenticate with the REST API via OAuth 2.0.

Paths & Operations 55

Across 37 paths, the API surfaces 55 operations — 6 DELETE, 21 GET, 6 PATCH, 22 POST. They span 11 resource areas, including Custom Fields, Environments, Reports, Rules, Flags, Changes, Rulesets, Variable Definitions, and 3 more. Each is listed below with its method, path, parameters, and response codes.

Custom Fields 5

APIs to manage Custom Field definitions for organizing and annotating flags

GET
/projects/{project_id}/custom_fields
List Custom Fields for a project
list_custom_fields 10 params → 200400401403404
POST
/projects/{project_id}/custom_fields
Create a new Custom Field
create_custom_field 1 param body → 201400401403
PATCH
/projects/{project_id}/custom_fields/{id}
Update an existing Custom Field
update_custom_field 2 params body → 200400401403404
POST
/projects/{project_id}/custom_fields/{id}/archived
Archive a Custom Field
archive_custom_field 2 params → 200400401403404
POST
/projects/{project_id}/custom_fields/{id}/unarchived
Unarchive a Custom Field
unarchive_custom_field 2 params → 200400401403404
Environments 1

APIs to list Environments

GET
/projects/{project_id}/environments
List Environments
list_environments 6 params → 200400401403
Reports 6

APIs to interact with Reports

GET
/projects/{project_id}/environments/{environment_key}/reports
List Reports
list_reports 8 params → 200400401403
POST
/projects/{project_id}/environments/{environment_key}/reports/archived
Archive Reports
archive_reports 2 params body → 200400401403404409
POST
/projects/{project_id}/environments/{environment_key}/reports/unarchived
Unarchive Reports
unarchive_reports 2 params body → 200400401403404409
DELETE
/projects/{project_id}/environments/{environment_key}/reports/{report_key}
Delete a Report
delete_report 3 params → 204400401403404
GET
/projects/{project_id}/environments/{environment_key}/reports/{report_key}
Fetch a Single Report
fetch_report 3 params → 200400401403404
POST
/projects/{project_id}/environments/{environment_key}/reports/{report_key}/reset-results
Reset the results for a Report
reset_results 3 params → 200400401403404
Rules 4

APIs to interact with Rules

GET
/projects/{project_id}/environments/{environment_key}/rule/{rule_key}/holdouts
Fetch holdouts for a specific rulekey
fetch_holdouts_by_rule_key 3 params → 200400401403404
GET
/projects/{project_id}/flags/{flag_key}/environments/{environment_key}/rules/{rule_key}
Fetch the Rule for a Ruleset in an Environment
fetch_rule 4 params → 200400401403404
GET
/projects/{project_id}/rules
List Rules
list_all_rules_in_project 8 params → 200400401403
GET
/projects/{project_id}/rules/{experiment_id}
Fetch a Rule for a specific experimentid
fetch_rule_by_experiment_id 2 params → 200400401403404
Flags 7

APIs to interact with Flags

GET
/projects/{project_id}/flags
List Flags
list_flags 17 params → 200400401403
PATCH
/projects/{project_id}/flags
Update Flags
update_flags 1 param body → 200400401403404409
POST
/projects/{project_id}/flags
Create a New Flag
create_flag 1 param body → 201400401403
POST
/projects/{project_id}/flags/archived
Archive Flags
archive_flags 1 param body → 200400401403404409
POST
/projects/{project_id}/flags/unarchived
Unarchive Flags
unarchive_flags 1 param body → 200400401403404409
DELETE
/projects/{project_id}/flags/{flag_key}
Delete a Flag
delete_flag 2 params → 204400401403404
GET
/projects/{project_id}/flags/{flag_key}
Fetch a Single Flag
fetch_flag 2 params → 200400401403404
Changes 1
GET
/projects/{project_id}/flags/{flag_id}/entities
Get Change History
entities 2 params → 200400401403
Rulesets 4

APIs to interact with Rulesets

GET
/projects/{project_id}/flags/{flag_key}/environments/{environment_key}/ruleset
Fetch the Ruleset for a Flag in an Environment
fetch_ruleset 3 params → 200400401403404
PATCH
/projects/{project_id}/flags/{flag_key}/environments/{environment_key}/ruleset
Update the Ruleset for a Flag in an Environment
update_ruleset 3 params body → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/environments/{environment_key}/ruleset/disabled
Disable the Ruleset for a Flag in an Environment
disable_ruleset 3 params → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/environments/{environment_key}/ruleset/enabled
Enable the Ruleset for a Flag in an Environment
enable_ruleset 3 params → 200400401403404409
Variable Definitions 6

APIs to interact with Variable Definitions

GET
/projects/{project_id}/flags/{flag_key}/variable_definitions
Fetch all variable definitions for flag.
list_variable_definitions 7 params → 200400401403
PATCH
/projects/{project_id}/flags/{flag_key}/variable_definitions
Update Variable Definitions
update_variable_definitions 2 params body → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/variable_definitions
Create Variable Definition
create_variable_definition 2 params body → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/variable_definitions/brainstorm
Brainstorm variable definitions using AI.
brainstorm_variable_definitions 2 params body → 200400401403
DELETE
/projects/{project_id}/flags/{flag_key}/variable_definitions/{variable_definition_key}
Delete a Variable Definition
delete_variable_definition 3 params → 204400401403404
GET
/projects/{project_id}/flags/{flag_key}/variable_definitions/{variable_definition_key}
Fetch a single variable definition by its key.
fetch_variable_definition 3 params → 200400401403
Variations 8

APIs to interact with Variations

GET
/projects/{project_id}/flags/{flag_key}/variations
List Variations
list_variations 10 params → 200400401403
PATCH
/projects/{project_id}/flags/{flag_key}/variations
Update Variations
update_variations 2 params body → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/variations
Create a New Variation
create_variation 2 params body → 201400401403
POST
/projects/{project_id}/flags/{flag_key}/variations/archived
Archive Variations
archive_variations 2 params body → 200400401403404409
POST
/projects/{project_id}/flags/{flag_key}/variations/brainstorm
Brainstorm variations definitions using AI.
brainstorm_variations 2 params body → 200400401403
POST
/projects/{project_id}/flags/{flag_key}/variations/unarchived
Unarchive Variations
unarchive_variations 2 params body → 200400401403404409
DELETE
/projects/{project_id}/flags/{flag_key}/variations/{variation_key}
Delete a Variation
delete_variation 3 params → 204400401403404
GET
/projects/{project_id}/flags/{flag_key}/variations/{variation_key}
Fetch a Single Variation
fetch_variation 3 params → 200400401403404
Groups 7

APIs to interact with mutual exclusion groups

GET
/projects/{project_id}/groups
List Exclusion Groups
list_groups 10 params → 200400401403
PATCH
/projects/{project_id}/groups
Update Exclusion Groups
update_groups 1 param body → 200400401403404409
POST
/projects/{project_id}/groups
Create an Exclusion Group
create_group 1 param body → 201400401403
POST
/projects/{project_id}/groups/archived
Archive Exclusion Groups
archive_groups 1 param body → 200400401403404409
POST
/projects/{project_id}/groups/unarchived
Unarchive Exclusion Groups
unarchive_groups 1 param body → 200400401403404409
DELETE
/projects/{project_id}/groups/{group_id}
Delete an Exclusion Group
delete_group 2 params → 204400401403404
GET
/projects/{project_id}/groups/{group_id}
Fetch a Single Exclusion Group
fetch_group 2 params → 200400401403404
Holdouts 6
GET
/projects/{project_id}/holdouts
List Holdouts for a project
list_holdouts 9 params → 200400401403404
POST
/projects/{project_id}/holdouts
Create a new Holdout
create_holdout 1 param body → 201400401403
DELETE
/projects/{project_id}/holdouts/{holdout_id}
Delete a Holdout
delete_holdout 2 params → 204400401403404
GET
/projects/{project_id}/holdouts/{holdout_id}
Fetch a single Holdout
fetch_holdout 2 params → 200400401403404
POST
/projects/{project_id}/holdouts/{holdout_id}
Update a Holdout using JSON Patch
update_holdouts 2 params body → 200400401403404409
GET
/projects/{project_id}/holdouts/{holdout_id}/experiments
Fetch experiments associated with a holdout
fetch_holdout_experiments 2 params → 200400401403404

Schemas 68

The contract defines 68 schemas that model the data the API accepts and returns. The most detailed are Rule (34 properties), RulesetRule (31 properties), Report (30 properties), Flag (24 properties). Each schema is shown below with its type and property counts.

AudienceConditions
An Audience Combination composed of other audiences. Each audience is a rule like 'User likes salads', and an Audience Combination is a Boolean combination of…
AudienceConditionsArray
array
AudienceConditionsString
string
A valid AudienceConditionsArray represented as a JSON string
BrainstormError
object
3 properties 3 required
BrainstormUserChat
object
3 properties 2 required
BrainstormVariableDefinition
object
4 properties 4 required
BrainstormVariablesChat
object
1 property 1 required
BrainstormVariablesInteraction
object
BrainstormVariablesResponse
object
3 properties 3 required
BrainstormVariation
object
4 properties 4 required
BrainstormVariationsChat
object
1 property 1 required
BrainstormVariationsInteraction
object
BrainstormVariationsResponse
object
3 properties 3 required
BulkOperationsRequestBody
object
1 property
ChangeHistory
array
Environment
object
9 properties 5 required
EnvironmentMap
object
Map of environments that include environment key as key and environment payload as value.
Environments
object
12 properties 8 required
EventPropertyCondition
object
4 properties 4 required
Flag
object
24 properties 8 required
FlagEnvironment
object
12 properties 3 required
FlagMap
object
Map of flags that include flag key as key and flag payload as value.
FlagRequestBody
object
7 properties 1 required
Flags
object
15 properties 8 required
CustomField
object
15 properties 6 required
CustomFieldRequestBody
object
6 properties 4 required
CustomFieldUpdateRequestBody
object
3 properties
CustomFieldsList
object
10 properties 8 required
Group
object
17 properties 6 required
GroupMap
object
Map of groups that include group id as key and group payload as value.
GroupRequestBody
object
4 properties 2 required
GroupRule
object
8 properties 1 required
GroupRuleMap
object
Map of group rules that include rule id as key and group rule as value.
Groups
object
14 properties 8 required
Holdout
object
Represents a holdout experiment that reserves a portion of traffic to measure the impact of feature flags and experiments. Holdouts help establish control grou…
22 properties 3 required
HoldoutExperiment
object
Represents a single experiment rule that is connected to a holdout configuration. Contains experiment identification, timing information from the associated re…
4 properties 1 required
HoldoutExperiments
array
A collection of experiment rules associated with a holdout. Each item represents an experiment that is connected to the holdout through database relationships…
HoldoutMap
object
A dictionary/map of holdouts where each key is the holdout ID and the value is the holdout object. This structure is used internally for efficient lookups and…
HoldoutRequestBody
object
Request body schema for creating or updating a holdout. Holdouts are experiments that reserve a portion of your traffic to measure the impact of your feature f…
20 properties 2 required
HoldoutsList
array
A simple array of holdout objects without pagination metadata. Used by endpoints that return a basic list of holdouts, such as when fetching holdouts associate…
HoldoutsPaginatedList
object
Paginated response structure for holdout collections with navigation links and metadata. This response format follows the standard pagination pattern used acro…
12 properties 8 required
Metric
object
13 properties 2 required
PatchRequestBody
object
A JSONPatch document as defined by RFC 6902
4 properties 2 required
ProblemDetail
object
https://tools.ietf.org/html/rfc7807section-3.1
5 properties 4 required
Report
object
Report with results for the active rule for a flag in a project.
30 properties 10 required
ReportMap
object
Map of reports that include report key as key and report payload as value.
Reports
object
Summary of the Reports for Flags in a project
14 properties 8 required
Rule
object
Configuration which contains audiences, metrics and variations.
34 properties 3 required
RuleAllowList
object
2 properties 2 required
RuleDetails
object
17 properties 7 required
RuleGroupRule
object
3 properties 1 required
RuleMap
object
RuleVariation
object
6 properties 1 required
Rules
object
6 properties 6 required
Ruleset
object
Rules configuration specific to an environment.
22 properties 5 required
RulesetRule
object
Configuration which contains audiences, metrics and variations.
31 properties 3 required
RulesetRuleVariation
object
5 properties 1 required
RulesetSummary
object
1 property
SubMetric
object
6 properties
UrlList
array
A list of urls.
UrlValue
string
A single url.
VariableDefinition
object
6 properties 3 required
VariableDefinitions
object
9 properties
VariableValue
object
5 properties 1 required
Variation
object
21 properties 8 required
VariationMap
object
Map of variations that include variation key as key and variation payload as value.
VariationRequestBody
object
4 properties 2 required
Variations
object
15 properties 8 required

Specification

The full machine-readable OpenAPI contract behind this narrative.

Source

optimizely-feature-experimentation-optimizely-feature-experimentation-api-openapi.json Raw ↑

Other APIs Optimizely publishes across the network.

Optimizely Experimentation REST API v2
Optimizely Flags Scheduling API
Optimizely Permission Service API
Optimizely Agent API
Optimizely Event API
Optimizely Edge Decider API
Optimizely Data Platform (ODP) API v3
Optimizely Graph API
Optimizely Content Marketing Platform (CMP) API v3
Optimizely Campaign REST API
Optimizely Configured Commerce API
Optimizely CMS Content Delivery API v3.0
Where this information came from

This is an independent, third-party profile of Optimizely Feature Experimentation Flags API v1, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.