Feature flag API
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
History
Use this API to interact with GitLab feature flags.
Prerequisites:
- You must have at least the Developer role.
List feature flags for a project
Gets all feature flags of the requested project.
GET /projects/:id/feature_flags
Use the page
and per_page
pagination parameters to
control the pagination of results.
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID or URL-encoded path of the project. |
scope | string | no | The condition of feature flags, one of: enabled , disabled . |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/feature_flags"
Example response:
[
{
"name":"merge_train",
"description":"This feature is about merge train",
"active": true,
"version": "new_version_flag",
"created_at":"2019-11-04T08:13:51.423Z",
"updated_at":"2019-11-04T08:13:51.423Z",
"scopes":[],
"strategies": [
{
"id": 1,
"name": "userWithId",
"parameters": {
"userIds": "user1"
},
"scopes": [
{
"id": 1,
"environment_scope": "production"
}
],
"user_list": null
}
]
},
{
"name":"new_live_trace",
"description":"This is a new live trace feature",
"active": true,
"version": "new_version_flag",
"created_at":"2019-11-04T08:13:10.507Z",
"updated_at":"2019-11-04T08:13:10.507Z",
"scopes":[],
"strategies": [
{
"id": 2,
"name": "default",
"parameters": {},
"scopes": [
{
"id": 2,
"environment_scope": "staging"
}
],
"user_list": null
}
]
},
{
"name":"user_list",
"description":"This feature is about user list",
"active": true,
"version": "new_version_flag",
"created_at":"2019-11-04T08:13:10.507Z",
"updated_at":"2019-11-04T08:13:10.507Z",
"scopes":[],
"strategies": [
{
"id": 2,
"name": "gitlabUserList",
"parameters": {},
"scopes": [
{
"id": 2,
"environment_scope": "staging"
}
],
"user_list": {
"id": 1,
"iid": 1,
"name": "My user list",
"user_xids": "user1,user2,user3"
}
}
]
}
]
Get a single feature flag
Gets a single feature flag.
GET /projects/:id/feature_flags/:feature_flag_name
Use the page
and per_page
pagination parameters to
control the pagination of results.
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID or URL-encoded path of the project. |
feature_flag_name | string | yes | The name of the feature flag. |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature"
Example response:
{
"name": "awesome_feature",
"description": null,
"active": true,
"version": "new_version_flag",
"created_at": "2020-05-13T19:56:33.119Z",
"updated_at": "2020-05-13T19:56:33.119Z",
"scopes": [],
"strategies": [
{
"id": 36,
"name": "default",
"parameters": {},
"scopes": [
{
"id": 37,
"environment_scope": "production"
}
],
"user_list": null
}
]
}
Create a feature flag
Creates a new feature flag.
POST /projects/:id/feature_flags
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID or URL-encoded path of the project. |
name | string | yes | The name of the feature flag. |
version | string | yes | Deprecated The version of the feature flag. Must be new_version_flag . Omit to create a Legacy feature flag. |
description | string | no | The description of the feature flag. |
active | boolean | no | The active state of the flag. Defaults to true. |
strategies | array of strategy JSON objects | no | The feature flag strategies. |
strategies:name | JSON | no | The strategy name. Can be default , gradualRolloutUserId , userWithId , or gitlabUserList . In GitLab 13.5 and later, can be flexibleRollout . |
strategies:parameters | JSON | no | The strategy parameters. |
strategies:scopes | JSON | no | The scopes for the strategy. |
strategies:scopes:environment_scope | string | no | The environment scope of the scope. |
strategies:user_list_id | integer/string | no | The ID of the feature flag user list. If strategy is gitlabUserList . |
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags" \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-type: application/json" \
--data @- << EOF
{
"name": "awesome_feature",
"version": "new_version_flag",
"strategies": [{ "name": "default", "parameters": {}, "scopes": [{ "environment_scope": "production" }] }]
}
EOF
Example response:
{
"name": "awesome_feature",
"description": null,
"active": true,
"version": "new_version_flag",
"created_at": "2020-05-13T19:56:33.119Z",
"updated_at": "2020-05-13T19:56:33.119Z",
"scopes": [],
"strategies": [
{
"id": 36,
"name": "default",
"parameters": {},
"scopes": [
{
"id": 37,
"environment_scope": "production"
}
]
}
]
}
Update a feature flag
Updates a feature flag.
PUT /projects/:id/feature_flags/:feature_flag_name
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID or URL-encoded path of the project. |
feature_flag_name | string | yes | The current name of the feature flag. |
description | string | no | The description of the feature flag. |
active | boolean | no | The active state of the flag. |
name | string | no | The new name of the feature flag. |
strategies | array of strategy JSON objects | no | The feature flag strategies. |
strategies:id | JSON | no | The feature flag strategy ID. |
strategies:name | JSON | no | The strategy name. |
strategies:_destroy | boolean | no | Delete the strategy when true. |
strategies:parameters | JSON | no | The strategy parameters. |
strategies:scopes | JSON | no | The scopes for the strategy. |
strategies:scopes:id | JSON | no | The environment scope ID. |
strategies:scopes:environment_scope | string | no | The environment scope of the scope. |
strategies:scopes:_destroy | boolean | no | Delete the scope when true. |
strategies:user_list_id | integer/string | no | The ID of the feature flag user list. If strategy is gitlabUserList . |
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature" \
--header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-type: application/json" \
--data @- << EOF
{
"strategies": [{ "name": "gradualRolloutUserId", "parameters": { "groupId": "default", "percentage": "25" }, "scopes": [{ "environment_scope": "staging" }] }]
}
EOF
Example response:
{
"name": "awesome_feature",
"description": null,
"active": true,
"version": "new_version_flag",
"created_at": "2020-05-13T20:10:32.891Z",
"updated_at": "2020-05-13T20:10:32.891Z",
"scopes": [],
"strategies": [
{
"id": 38,
"name": "gradualRolloutUserId",
"parameters": {
"groupId": "default",
"percentage": "25"
},
"scopes": [
{
"id": 40,
"environment_scope": "staging"
}
]
},
{
"id": 37,
"name": "default",
"parameters": {},
"scopes": [
{
"id": 39,
"environment_scope": "production"
}
]
}
]
}
Delete a feature flag
Deletes a feature flag.
DELETE /projects/:id/feature_flags/:feature_flag_name
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID or URL-encoded path of the project. |
feature_flag_name | string | yes | The name of the feature flag. |
curl --header "PRIVATE-TOKEN: <your_access_token>" --request DELETE "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature"