Get a health report for a project.
GET/api/admin/projects/:projectId/health-report
This endpoint returns a health report for the specified project. This data is used for the technical debt dashboard
Request
Path Parameters
Responses
- 200
- 401
- 403
- 404
healthReportSchema
- application/json
- Schema
- Example (from schema)
Schema
Array [
Array [
]
Array [
]
]
Array [
Array [
Array [
Array [
]
Array [
]
]
Array [
Array [
]
]
]
Array [
Array [
]
]
Array [
]
Array [
]
Array [
]
]
The project overview version.
1The project's name
enterprisegrowthThe project's description
The project for all things enterprisegrowthA default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy
userIdThe project's collaboration mode. Determines whether non-project members can submit change requests or not.
Possible values: [open, protected, private]
openA limit on the number of features allowed in the project. Null if no limit.
100The number of users/members in the project.
5environments
object[]
required
An array containing the names of all the environments configured for the project.
The environment to add to the project
developmentWhether change requests should be enabled or for this environment on the project or not
truedefaultStrategy
object
A default strategy to create for this environment on the project.
The name of the strategy type
flexibleRolloutA descriptive title for the strategy
Gradual Rollout 25-ProdA toggle to disable the strategy. defaults to false. Disabled strategies are not evaluated or returned to the SDKs
falseThe order of the strategy in the list
9999constraints
object[]
A list of the constraints attached to the strategy. See https://docs.getunleash.io/reference/strategy-constraints
The name of the context field that this constraint should apply to.
appNameThe operator to use when evaluating this constraint. For more information about the various operators, refer to the strategy constraint operator documentation.
Possible values: [NOT_IN, IN, STR_ENDS_WITH, STR_STARTS_WITH, STR_CONTAINS, NUM_EQ, NUM_GT, NUM_GTE, NUM_LT, NUM_LTE, DATE_AFTER, DATE_BEFORE, SEMVER_EQ, SEMVER_GT, SEMVER_LT]
INWhether the operator should be case sensitive or not. Defaults to false (being case sensitive).
falseWhether the result should be negated or not. If true, will turn a true result into a false result and vice versa.
falseThe context values that should be used for constraint evaluation. Use this property instead of value for properties that accept multiple values.
["my-app","my-other-app"]The context value that should be used for constraint evaluation. Use this property instead of values for properties that only accept single values.
my-appvariants
object[]
Strategy level variants
The variant name. Must be unique for this feature flag
blue_groupThe weight is the likelihood of any one user getting this variant. It is an integer between 0 and 1000. See the section on variant weights for more information
Possible values: <= 1000
Set to fix if this variant must have exactly the weight allocated to it. If the type is variable, the weight will adjust so that the total weight of all variants adds up to 1000. Refer to the variant weight documentation.
Possible values: [variable, fix]
fixThe stickiness to use for distribution of this variant. Stickiness is how Unleash guarantees that the same user gets the same variant every time
custom.context.fieldpayload
object
Extra data configured for this variant
The type of the value. Commonly used types are string, number, json and csv.
Possible values: [json, csv, string, number]
The actual value of payload
parameters
object
A list of parameters for a strategy
Ids of segments to use for this strategy
[1,2]features
object[]
required
An array containing an overview of all the features of the project and their individual status
Unique feature name
disable-commentsType of the flag e.g. experiment, kill-switch, release, operational, permission
kill-switchDetailed description of the feature
Controls disabling of the comments section in case of an incidenttrue if the feature is archived
trueName of the project the feature belongs to
dx-squadtrue if the feature is enabled, otherwise false.
truetrue if the feature is stale based on the age and feature type, otherwise false.
falsetrue if the feature was favorited, otherwise false.
truetrue if the impression data collection is enabled for the feature, otherwise false.
falseThe date the feature was created
2023-01-28T15:21:39.975ZcreatedBy
object
User who created the feature flag
The user id
123Name of the user
UserURL used for the user profile image
https://example.com/242x200.pngThe date the feature was archived
2023-01-29T15:21:39.975ZThe date when metrics where last collected for the feature. This field was deprecated in v5, use the one in featureEnvironmentSchema
2023-01-28T16:21:39.975Zenvironments
object[]
The list of environments where the feature can be used
The name of the environment
my-dev-envThe name of the feature
disable-commentsThe name of the environment
developmentThe type of the environment
developmenttrue if the feature is enabled for the environment, otherwise false.
trueThe sort order of the feature environment in the feature environments list
3The number of defined variants
strategies
object[]
A list of activation strategies for the feature environment
A uuid for the feature strategy
6b5157cb-343a-41e7-bfa3-7b4ec3044840The name or type of strategy
flexibleRolloutA descriptive title for the strategy
Gradual Rollout 25-ProdA toggle to disable the strategy. defaults to false. Disabled strategies are not evaluated or returned to the SDKs
falseThe name or feature the strategy is attached to
myAwesomeFeatureThe order of the strategy in the list
9999A list of segment ids attached to the strategy
[1,2]constraints
object[]
A list of the constraints attached to the strategy. See https://docs.getunleash.io/reference/strategy-constraints
The name of the context field that this constraint should apply to.
appNameThe operator to use when evaluating this constraint. For more information about the various operators, refer to the strategy constraint operator documentation.
Possible values: [NOT_IN, IN, STR_ENDS_WITH, STR_STARTS_WITH, STR_CONTAINS, NUM_EQ, NUM_GT, NUM_GTE, NUM_LT, NUM_LTE, DATE_AFTER, DATE_BEFORE, SEMVER_EQ, SEMVER_GT, SEMVER_LT]
INWhether the operator should be case sensitive or not. Defaults to false (being case sensitive).
falseWhether the result should be negated or not. If true, will turn a true result into a false result and vice versa.
falseThe context values that should be used for constraint evaluation. Use this property instead of value for properties that accept multiple values.
["my-app","my-other-app"]The context value that should be used for constraint evaluation. Use this property instead of values for properties that only accept single values.
my-appvariants
object[]
Strategy level variants
The variant name. Must be unique for this feature flag
blue_groupThe weight is the likelihood of any one user getting this variant. It is an integer between 0 and 1000. See the section on variant weights for more information
Possible values: <= 1000
Set to fix if this variant must have exactly the weight allocated to it. If the type is variable, the weight will adjust so that the total weight of all variants adds up to 1000. Refer to the variant weight documentation.
Possible values: [variable, fix]
fixThe stickiness to use for distribution of this variant. Stickiness is how Unleash guarantees that the same user gets the same variant every time
custom.context.fieldpayload
object
Extra data configured for this variant
The type of the value. Commonly used types are string, number, json and csv.
Possible values: [json, csv, string, number]
The actual value of payload
parameters
object
A list of parameters for a strategy
variants
object[]
A list of variants for the feature environment
The variants name. Is unique for this feature flag
blue_groupThe weight is the likelihood of any one user getting this variant. It is a number between 0 and 1000. See the section on variant weights for more information
Possible values: <= 1000
Set to fix if this variant must have exactly the weight allocated to it. If the type is variable, the weight will adjust so that the total weight of all variants adds up to 1000
Possible values: [variable, fix]
variableStickiness is how Unleash guarantees that the same user gets the same variant every time
custom.context.fieldpayload
object
Extra data configured for this variant
The type of the value. Commonly used types are string, number, json and csv.
Possible values: [json, csv, string, number]
The actual value of payload
overrides
object[]
Overrides assigning specific variants to specific users. The weighting system automatically assigns users to specific groups for you, but any overrides in this list will take precedence.
The name of the context field used to determine overrides
userIdWhich values that should be overriden
["red","blue"]The date when metrics where last collected for the feature environment
2023-01-28T16:21:39.975ZWhether the feature has any strategies defined.
Whether the feature has any enabled strategies defined.
variants
object[]
deprecated
The list of feature variants
The variants name. Is unique for this feature flag
blue_groupThe weight is the likelihood of any one user getting this variant. It is a number between 0 and 1000. See the section on variant weights for more information
Possible values: <= 1000
Set to fix if this variant must have exactly the weight allocated to it. If the type is variable, the weight will adjust so that the total weight of all variants adds up to 1000
Possible values: [variable, fix]
variableStickiness is how Unleash guarantees that the same user gets the same variant every time
custom.context.fieldpayload
object
Extra data configured for this variant
The type of the value. Commonly used types are string, number, json and csv.
Possible values: [json, csv, string, number]
The actual value of payload
overrides
object[]
Overrides assigning specific variants to specific users. The weighting system automatically assigns users to specific groups for you, but any overrides in this list will take precedence.
The name of the context field used to determine overrides
userIdWhich values that should be overriden
["red","blue"]This was deprecated in v5 and will be removed in a future major version
tags
object[]
nullable
The list of feature tags
The value of the tag.
Possible values: >= 2 characters and <= 50 characters
a-tag-valueThe type of the tag
Possible values: >= 2 characters and <= 50 characters
simpleThe list of child feature names. This is an experimental field and may change.
lifecycle
object
Current lifecycle stage of the feature
The name of the current lifecycle stage
Possible values: [initial, pre-live, live, completed, archived]
initialWhen the feature entered this stage
2023-01-28T15:21:39.975Zdependencies
object[]
The list of parent dependencies. This is an experimental field and may change.
The name of the parent feature
some-featureWhether the parent feature is enabled or not
trueThe list of variants the parent feature should resolve to. Only valid when feature is enabled.
collaborators
object
Information related to users who have made changes to this feature flage.
users
object[]
required
Users who have made any changes to this feature flags. The list is sorted in reverse chronological order (most recent changes first)
The user's id
123The user's name, username, or email (prioritized in that order). If none of those are present, this property will be set to the string unknown
UserThe URL to the user's profile image
https://example.com/242x200.pngWhen the project was last updated.
2023-04-19T08:15:14.000ZWhen the project was last updated.
2023-04-19T08:15:14.000ZIndicates if the project has been marked as a favorite by the current user requesting the project health overview.
truestats
object
Project statistics
The average time from when a feature was created to when it was enabled in the "production" environment during the current window
10The number of feature flags created during the current window
15The number of feature flags created during the previous window
15The number of feature flags that were archived during the current window
5The number of feature flags that were archived during the previous window
5The number of project events that occurred during the current window
100The number of project events that occurred during the previous window
100The number of members that were added to the project during the current window
1featureNaming
object
Create a feature naming pattern
A JavaScript regular expression pattern, without the start and end delimiters. Optional flags are not allowed.
^[A-Za-z]+\.[A-Za-z]+\.[A-Za-z0-9-]+$An example of a feature name that matches the pattern. Must itself match the pattern supplied.
dx.feature1.1-135A description of the pattern in a human-readable format. Will be shown to users when they create a new feature flag.
<project>.<featureName>.<ticket>
The flag name should contain the project name, the feature name, and the ticket number, each separated by a dot.The number of potentially stale feature flags.
5The number of active feature flags.
2The number of stale feature flags.
10{
"version": 1,
"name": "enterprisegrowth",
"description": "The project for all things enterprisegrowth",
"defaultStickiness": "userId",
"mode": "open",
"featureLimit": 100,
"members": 5,
"health": 95,
"environments": [
{
"environment": "development",
"changeRequestsEnabled": true,
"defaultStrategy": {
"name": "flexibleRollout",
"title": "Gradual Rollout 25-Prod",
"disabled": false,
"sortOrder": 9999,
"constraints": [
{
"values": [
"1",
"2"
],
"inverted": false,
"operator": "IN",
"contextName": "appName",
"caseInsensitive": false
}
],
"variants": [
{
"name": "blue_group",
"weight": 0,
"weightType": "fix",
"stickiness": "custom.context.field",
"payload": {
"type": "json",
"value": "{\"color\": \"red\"}"
}
}
],
"parameters": {
"groupId": "some_new",
"rollout": "25",
"stickiness": "sessionId"
},
"segments": [
1,
2
]
}
}
],
"features": [
{
"name": "disable-comments",
"type": "kill-switch",
"description": "Controls disabling of the comments section in case of an incident",
"archived": true,
"project": "dx-squad",
"enabled": true,
"stale": false,
"favorite": true,
"impressionData": false,
"createdAt": "2023-01-28T15:21:39.975Z",
"createdBy": {
"id": 123,
"name": "User",
"imageUrl": "https://example.com/242x200.png"
},
"archivedAt": "2023-01-29T15:21:39.975Z",
"environments": [
{
"name": "my-dev-env",
"featureName": "disable-comments",
"environment": "development",
"type": "development",
"enabled": true,
"sortOrder": 3,
"variantCount": 0,
"strategies": [
{
"id": "6b5157cb-343a-41e7-bfa3-7b4ec3044840",
"name": "flexibleRollout",
"title": "Gradual Rollout 25-Prod",
"disabled": false,
"featureName": "myAwesomeFeature",
"sortOrder": 9999,
"segments": [
1,
2
],
"constraints": [
{
"contextName": "appName",
"operator": "IN",
"caseInsensitive": false,
"inverted": false,
"values": [
"my-app",
"my-other-app"
],
"value": "my-app"
}
],
"variants": [
{
"name": "blue_group",
"weight": 0,
"weightType": "fix",
"stickiness": "custom.context.field",
"payload": {
"type": "json",
"value": "{\"color\": \"red\"}"
}
}
],
"parameters": {}
}
],
"variants": [
{
"name": "blue_group",
"weight": 0,
"weightType": "variable",
"stickiness": "custom.context.field",
"payload": {
"type": "json",
"value": "{\"color\": \"red\"}"
},
"overrides": [
{
"contextName": "userId",
"values": [
"red",
"blue"
]
}
]
}
],
"lastSeenAt": "2023-01-28T16:21:39.975Z",
"hasStrategies": true,
"hasEnabledStrategies": true
}
],
"tags": [
{
"value": "a-tag-value",
"type": "simple"
}
],
"children": [
"some-feature"
],
"lifecycle": {
"stage": "initial",
"enteredStageAt": "2023-01-28T15:21:39.975Z"
},
"dependencies": [
{
"feature": "some-feature",
"enabled": true,
"variants": [
"some-feature-blue-variant"
]
}
],
"collaborators": {
"users": [
{
"id": 123,
"name": "User",
"imageUrl": "https://example.com/242x200.png"
}
]
}
}
],
"updatedAt": "2023-04-19T08:15:14.000Z",
"createdAt": "2023-04-19T08:15:14.000Z",
"favorite": true,
"stats": {
"avgTimeToProdCurrentWindow": 10,
"createdCurrentWindow": 15,
"createdPastWindow": 15,
"archivedCurrentWindow": 5,
"archivedPastWindow": 5,
"projectActivityCurrentWindow": 100,
"projectActivityPastWindow": 100,
"projectMembersAddedCurrentWindow": 1
},
"featureNaming": {
"pattern": "^[A-Za-z]+\\.[A-Za-z]+\\.[A-Za-z0-9-]+$",
"example": "dx.feature1.1-135",
"description": "<project>.<featureName>.<ticket>\n\nThe flag name should contain the project name, the feature name, and the ticket number, each separated by a dot."
},
"potentiallyStaleCount": 5,
"activeCount": 2,
"staleCount": 10
}
Authorization information is missing or invalid. Provide a valid API token as the authorization header, e.g. authorization:*.*.my-admin-token.
- application/json
- Schema
- Example (from schema)
Schema
The ID of the error instance
9c40958a-daac-400e-98fb-3bb438567008The name of the error kind
AuthenticationRequiredA description of what went wrong.
You must log in to use Unleash. Your request had no authorization header, so we could not authorize you. Try logging in at /auth/simple/login.{
"id": "9c40958a-daac-400e-98fb-3bb438567008",
"name": "AuthenticationRequired",
"message": "You must log in to use Unleash. Your request had no authorization header, so we could not authorize you. Try logging in at /auth/simple/login."
}
The provided user credentials are valid, but the user does not have the necessary permissions to perform this operation
- application/json
- Schema
- Example (from schema)
Schema
The ID of the error instance
9c40958a-daac-400e-98fb-3bb438567008The name of the error kind
NoAccessErrorA description of what went wrong.
You need the "UPDATE_ADDON" permission to perform this action in the "development" environment.{
"id": "9c40958a-daac-400e-98fb-3bb438567008",
"name": "NoAccessError",
"message": "You need the \"UPDATE_ADDON\" permission to perform this action in the \"development\" environment."
}
The requested resource was not found.
- application/json
- Schema
- Example (from schema)
Schema
The ID of the error instance
9c40958a-daac-400e-98fb-3bb438567008The name of the error kind
NotFoundErrorA description of what went wrong.
Could not find the addon with ID "12345".{
"id": "9c40958a-daac-400e-98fb-3bb438567008",
"name": "NotFoundError",
"message": "Could not find the addon with ID \"12345\"."
}