2020-06-16 23:08:38 -04:00
---
stage: Release
group: Progressive Delivery
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
2019-11-14 13:06:15 -05:00
# Feature Flag Specs API **(PREMIUM)**
2020-05-21 02:08:25 -04:00
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9566) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.5.
2019-11-14 13:06:15 -05:00
2020-07-16 02:09:33 -04:00
CAUTION: **Deprecation:**
2020-05-22 11:08:09 -04:00
This API is deprecated and [scheduled for removal in GitLab 14.0 ](https://gitlab.com/gitlab-org/gitlab/-/issues/213369 ).
The API for creating, updating, reading and deleting Feature Flag Specs.
2019-11-14 13:06:15 -05:00
Automation engineers benefit from this API by being able to modify Feature Flag Specs without accessing user interface.
2020-07-09 17:09:33 -04:00
To manage the [Feature Flag ](../operations/feature_flags.md ) resources via public API, please refer to the [Feature Flags API ](feature_flags.md ) document.
2019-11-14 13:06:15 -05:00
Users with Developer or higher [permissions ](../user/permissions.md ) can access Feature Flag Specs API.
## List all effective feature flag specs under the specified environment
2020-05-15 14:07:52 -04:00
Get all effective feature flag specs under the specified [environment ](../ci/environments/index.md ).
2019-11-14 13:06:15 -05:00
For instance, there are two specs, `staging` and `production` , for a feature flag.
When you pass `production` as a parameter to this endpoint, the system returns
the `production` feature flag spec only.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
GET /projects/:id/feature_flag_scopes
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
2020-05-15 14:07:52 -04:00
| `environment` | string | yes | The [environment ](../ci/environments/index.md ) name |
2019-11-14 13:06:15 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/feature_flag_scopes?environment=production"
2019-11-14 13:06:15 -05:00
```
Example response:
```json
[
{
"id": 88,
"active": true,
"environment_scope": "production",
"strategies": [
{
"name": "userWithId",
"parameters": {
"userIds": "1,2,3"
}
}
],
"created_at": "2019-11-04T08:36:41.327Z",
"updated_at": "2019-11-04T08:36:41.327Z",
"name": "awesome_feature"
},
{
"id": 82,
"active": true,
"environment_scope": "*",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:51.425Z",
"updated_at": "2019-11-04T08:39:45.751Z",
"name": "merge_train"
},
{
"id": 81,
"active": false,
"environment_scope": "production",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.527Z",
"updated_at": "2019-11-04T08:13:10.527Z",
"name": "new_live_trace"
}
]
```
## List all specs of a feature flag
Get all specs of a feature flag.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
GET /projects/:id/feature_flags/:name/scopes
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
| `name` | string | yes | The name of the feature flag. |
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/feature_flags/new_live_trace/scopes"
2019-11-14 13:06:15 -05:00
```
Example response:
```json
[
{
"id": 79,
"active": false,
"environment_scope": "*",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.516Z",
"updated_at": "2019-11-04T08:13:10.516Z"
},
{
"id": 80,
"active": true,
"environment_scope": "staging",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.525Z",
"updated_at": "2019-11-04T08:13:10.525Z"
},
{
"id": 81,
"active": false,
"environment_scope": "production",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.527Z",
"updated_at": "2019-11-04T08:13:10.527Z"
}
]
```
## New feature flag spec
Creates a new feature flag spec.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
POST /projects/:id/feature_flags/:name/scopes
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
| `name` | string | yes | The name of the feature flag. |
2020-05-15 14:07:52 -04:00
| `environment_scope` | string | yes | The [environment spec ](../ci/environments/index.md#scoping-environments-with-specs ) of the feature flag. |
2019-11-14 13:06:15 -05:00
| `active` | boolean | yes | Whether the spec is active. |
2020-07-09 17:09:33 -04:00
| `strategies` | JSON | yes | The [strategies ](../operations/feature_flags.md#feature-flag-strategies ) of the feature flag spec. |
2019-11-14 13:06:15 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags/new_live_trace/scopes" \
2019-11-14 13:06:15 -05:00
--header "PRIVATE-TOKEN: < your_access_token > " \
--header "Content-type: application/json" \
--data @- < < EOF
{
"environment_scope": "*",
"active": false,
"strategies": [{ "name": "default", "parameters": {} }]
}
EOF
```
Example response:
```json
{
"id": 81,
"active": false,
"environment_scope": "*",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.527Z",
"updated_at": "2019-11-04T08:13:10.527Z"
}
```
## Single feature flag spec
Gets a single feature flag spec.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
GET /projects/:id/feature_flags/:name/scopes/:environment_scope
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
| `name` | string | yes | The name of the feature flag. |
2020-05-15 14:07:52 -04:00
| `environment_scope` | string | yes | The URL-encoded [environment spec ](../ci/environments/index.md#scoping-environments-with-specs ) of the feature flag. |
2019-11-14 13:06:15 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/:id/feature_flags/new_live_trace/scopes/production"
2019-11-14 13:06:15 -05:00
```
Example response:
```json
{
"id": 81,
"active": false,
"environment_scope": "production",
"strategies": [
{
"name": "default",
"parameters": {}
}
],
"created_at": "2019-11-04T08:13:10.527Z",
"updated_at": "2019-11-04T08:13:10.527Z"
}
```
## Edit feature flag spec
Updates an existing feature flag spec.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
PUT /projects/:id/feature_flags/:name/scopes/:environment_scope
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
| `name` | string | yes | The name of the feature flag. |
2020-05-15 14:07:52 -04:00
| `environment_scope` | string | yes | The URL-encoded [environment spec ](../ci/environments/index.md#scoping-environments-with-specs ) of the feature flag. |
2019-11-14 13:06:15 -05:00
| `active` | boolean | yes | Whether the spec is active. |
2020-07-09 17:09:33 -04:00
| `strategies` | JSON | yes | The [strategies ](../operations/feature_flags.md#feature-flag-strategies ) of the feature flag spec. |
2019-11-14 13:06:15 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags/new_live_trace/scopes/production" \
2019-11-14 13:06:15 -05:00
--header "PRIVATE-TOKEN: < your_access_token > " \
--header "Content-type: application/json" \
--data @- < < EOF
{
"active": true,
"strategies": [{ "name": "userWithId", "parameters": { "userIds": "1,2,3" } }]
}
EOF
```
Example response:
```json
{
"id": 81,
"active": true,
"environment_scope": "production",
"strategies": [
{
"name": "userWithId",
"parameters": { "userIds": "1,2,3" }
}
],
"created_at": "2019-11-04T08:13:10.527Z",
"updated_at": "2019-11-04T08:13:10.527Z"
}
```
## Delete feature flag spec
Deletes a feature flag spec.
2020-02-27 04:09:01 -05:00
```plaintext
2019-11-14 13:06:15 -05:00
DELETE /projects/:id/feature_flags/:name/scopes/:environment_scope
```
| Attribute | Type | Required | Description |
| ------------------- | ---------------- | ---------- | ---------------------------------------------------------------------------------------|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ). |
| `name` | string | yes | The name of the feature flag. |
2020-05-15 14:07:52 -04:00
| `environment_scope` | string | yes | The URL-encoded [environment spec ](../ci/environments/index.md#scoping-environments-with-specs ) of the feature flag. |
2019-11-14 13:06:15 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " --request DELETE "https://gitlab.example.com/api/v4/projects/1/feature_flags/new_live_trace/scopes/production"
2019-11-14 13:06:15 -05:00
```