1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/docs/api/oas/swagger.json
gazconroy c7c2f17bd0
feat: First draft of admin Open API specification (OAS) (#652)
Co-authored-by: Ivar Conradi Østhus <ivarconr@gmail.com>
2020-12-03 21:09:16 +01:00

1677 lines
49 KiB
JSON

{
"swagger": "2.0",
"info": {
"contact": {
"name": "The Unleash team",
"url": "https://unleash.github.io/"
},
"description": "Unleash is an open source feature flag and toggle system for all your applications and services.\n\nOnce you have [set your Unleash server up](https://unleash.github.io/docs/getting_started), you can test the API from inside your browser. The following assumes the server is running on localhost:4242.\n\nThe following 'endpoints' (such as `GET /admin/metrics/applications`) provide reference documentation for the Unleash REST API. To try out API calls:\n1. Expand an endpoint\n2. Click **Try it out**\n3. Customize the **Request body** and/or **Parameters**.\n4. Click **Execute**.\n\nYou will see the cURL request submitted to the API server and the corresponding response.\n\nAlternatively, you can test the API in [Postman](https://app.getpostman.com/run-collection/8552ddcd4cc9fc012548)\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/8552ddcd4cc9fc012548)",
"title": "Unleash API",
"version": "3.5.6"
},
"host": "localhost:4242",
"basePath": "/api",
"schemes": [
"http"
],
"paths": {
"/admin/archive/features": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Archive"
],
"description": "Archived feature toggles are those that have been previously deleted",
"operationId": "fetchArchivedToggles",
"summary": "List all the archived feature toggles on the Unleash server"
}
},
"/admin/archive/revive/{featureName}": {
"post": {
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Feature Toggle successfully revived"
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Archive"
],
"description": "The Feature Toggle had been previously deleted",
"operationId": "reviveFeatureToggle",
"summary": "Un-archive a Feature Toggle"
}
},
"/admin/events": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/200-events"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Events"
],
"description": "Returns one of the six event types:\n- feature-created\n- feature-updated\n- feature-archived\n- feature-revived\n- strategy-created\n- strategy-deleted",
"operationId": "get-admin-events",
"summary": "Fetch all changes in the Unleash system"
}
},
"/admin/feature-types": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/200featuretype"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Feature types"
],
"description": "- release\n- experiment\n- ops\n- killswitch\n- permission",
"operationId": "get-admin-feature-types",
"summary": "Fetch the list of Unleash feature types"
}
},
"/admin/features": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Feature toggles"
],
"externalDocs": {
"description": "Activation strategies",
"url": "https://unleash.github.io/docs/activation_strategy"
},
"description": "The response returns all active feature toggles and their current strategy configuration:\n- A feature toggle will have *at least* one configured strategy.\n- A strategy will have a `name` and `parameters` map.\n",
"operationId": "getFeatures",
"summary": "Fetches all feature toggles from the Unleash server."
},
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"$ref": "#/definitions/featureToggleSchema"
}
}
],
"responses": {
"201": {
"description": "Feature Toggle successfully created"
},
"400": {
"description": "Bad body request (for example, Feature Toggle name is not unique)"
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Feature toggles"
],
"description": "Create a new Feature Toggle",
"operationId": "createFeatureToggle",
"summary": "Create a Feature Toggle"
}
},
"/admin/features/{featureName}": {
"delete": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Feature Toggle successfully archived"
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles",
"Archive"
],
"description": "Feature toggles can only be archived - they cannot be deleted.\n\nIf an old Feature Toggle *re-appears*, this is because someone else has created a new one with the same name.\n",
"operationId": "archiveFeatureToggle",
"summary": "Archive a Feature Toggle."
},
"get": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Feature toggles"
],
"externalDocs": {
"description": "Activation strategies",
"url": "https://unleash.github.io/docs/activation_strategy"
},
"description": "The response returns the Feature Toggle's current strategy configuration:\n- It will have *at least* one configured strategy.\n- A strategy will have a *name* and *parameters* map.\n",
"operationId": "getFeature",
"summary": "Fetches a specific Feature Toggle from the Unleash server."
},
"put": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"$ref": "#/definitions/featureToggleSchema"
}
}
],
"responses": {
"200": {
"description": "Feature Toggle successfully updated",
"schema": {
"$ref": "#/definitions/200"
}
},
"400": {
"description": "Bad body request (for example 'strategies' is not an array)"
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles"
],
"description": "Update a Feature Toggle.",
"operationId": "featureName",
"summary": "Update a Feature Toggle"
}
},
"/admin/features/{featureName}/stale/off": {
"post": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles"
],
"externalDocs": {
"description": "Feature Toggle types",
"url": "https://unleash.github.io/docs/feature_toggle_types"
},
"description": "**featureName** must match an existing Feature Toggle.",
"operationId": "markFeatureToggleActive",
"summary": "Mark a Feature Toggle as active."
}
},
"/admin/features/{featureName}/stale/on": {
"post": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles"
],
"externalDocs": {
"description": "Feature Toggle types",
"url": "https://unleash.github.io/docs/feature_toggle_types"
},
"description": "**featureName** must match an existing Feature Toggle.",
"operationId": "markFeatureToggleStale",
"summary": "Mark a Feature Toggle as 'stale' (deprecated)."
}
},
"/admin/features/{featureName}/toggle/off": {
"post": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles"
],
"description": "**featureName** must match an existing Feature Toggle.",
"operationId": "disableFeatureToggle",
"summary": "Disable a Feature Toggle."
}
},
"/admin/features/{featureName}/toggle/on": {
"post": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Feature Toggle not found"
}
},
"tags": [
"Feature toggles"
],
"description": "**featureName** must match an existing Feature Toggle.",
"operationId": "enableFeatureToggle",
"summary": "Enable a Feature Toggle."
}
},
"/admin/metrics/applications": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/applicationArray"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Metrics"
],
"description": "Also has a link for more details.",
"operationId": "getApplications",
"summary": "A list of known applications ('seen' by Unleash in the last two days)"
}
},
"/admin/metrics/applications/{appName}": {
"get": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing application name.",
"in": "path",
"name": "appName",
"required": true,
"type": "string",
"x-example": "my-application"
}
],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200appdetails"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"500": {
"description": "Application name not found"
}
},
"tags": [
"Metrics"
],
"description": "Details include things such as instances, strategies implemented and seen feature toggles.",
"operationId": "getApplicationDetails",
"summary": "Details about a client application."
}
},
"/admin/metrics/feature-toggles": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200feature"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Metrics"
],
"description": "- **Yes** is the number of times a given feature toggle was enabled in a client applucation\n- **No** is the number of times it was disabled.",
"operationId": "featureToggles",
"summary": "Gives 'last minute' and 'last hour' metrics for all active feature toggles (based on what was reported by the client applications)."
}
},
"/admin/metrics/seen-apps": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/applicationArray"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Metrics"
],
"description": "(per Feature Toggle)",
"operationId": "seenApps",
"summary": "Details about seen applications"
}
},
"/admin/metrics/seen-toggles": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200seen"
}
}
},
"tags": [
"Metrics"
],
"description": "It is only guaranteed that feature toggles reported by client applications within the last hour will be returned. However, in most cases, earlier reported feature toggles will also be returned.",
"operationId": "seenToggles",
"summary": "Returns a list of applications and the feature toggles that Unleash has 'seen' for each application."
}
},
"/admin/state/export": {
"get": {
"produces": [
"application/json"
],
"parameters": [
{
"description": "Choose export format, either json or yaml. json is the default\n",
"enum": [
"json",
"yaml"
],
"in": "query",
"name": "format",
"type": "string",
"x-example": "json"
},
{
"description": "Do you want to export the data as a file? Default is false",
"in": "query",
"name": "download",
"type": "boolean",
"x-example": false
},
{
"description": "Do you want to include feature toggles in the export? Default is true",
"in": "query",
"name": "featureToggles",
"type": "boolean",
"x-example": true
},
{
"description": "Do you want to include strategies in the export? Default is true",
"in": "query",
"name": "strategies",
"type": "boolean",
"x-example": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/200export"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Import and export"
],
"externalDocs": {
"description": "Import and export",
"url": "https://unleash.github.io/docs/import_export"
},
"description": "Exports a list of feature toggles and/or strategies in either JSON or YAML format.",
"operationId": "get-admin-state-export",
"summary": "Export feature toggles and strategies"
}
},
"/admin/state/import": {
"post": {
"consumes": [
"multipart/form-data",
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"default": "false",
"description": "Be careful using this in production environments. Set to true if you want the to remove all strategies and feature toggles from the datebase before import. Default is false.",
"in": "query",
"name": "drop",
"type": "boolean"
},
{
"default": "false",
"description": "Set to *true* if you want keep all existing feature toggles and strategies as is; only the missing feature toggles and strategies will be inserted from the import data. Default is true.",
"in": "query",
"name": "keep",
"type": "boolean",
"x-example": true
},
{
"format": "binary",
"in": "formData",
"name": "fileName",
"type": "string"
}
],
"responses": {
"200": {
"description": "Successful import."
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "No import data provided."
}
},
"tags": [
"Import and export"
],
"externalDocs": {
"description": "Import and export",
"url": "https://unleash.github.io/docs/import_export"
},
"description": "Upload the data, in JSON or YAML format.\nYou can add in the POST body or upload a file\n- **POST body** (JSON format only) - next to **Request body**, choose the *application/json* dropdown option.\n- **File upload** (JOSN or YAML format) - next to **Request body**, choose the *multipart/form-data* dropdown option. This adopts the same schema as `GET /admin/state/export`",
"operationId": "post-admin-state-import",
"summary": "Import feature toggles and strategies"
}
},
"/admin/strategies": {
"get": {
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful response",
"schema": {
"$ref": "#/definitions/200strategy"
}
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
}
},
"tags": [
"Strategies"
],
"description": "Fetch all strategies and their parameters.",
"operationId": "getStrategies",
"summary": "Fetch all strategies and their parameters."
},
"post": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"$ref": "#/definitions/createStrategy"
}
}
],
"responses": {
"201": {
"description": "Strategy successfully added"
},
"400": {
"description": "Bad body request (for example 'strategies' is not an array)"
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"409": {
"description": "Strategy already exists",
"schema": {
"$ref": "#/definitions/409"
}
}
},
"tags": [
"Strategies"
],
"description": "Create Strategy",
"operationId": "createStrategy",
"summary": "Create Strategy"
}
},
"/admin/strategies/{strategyName}": {
"put": {
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"description": "Must match an existing Strategy name.",
"in": "path",
"name": "strategyName",
"required": true,
"type": "string",
"x-example": "flexibleRollout"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"$ref": "#/definitions/createStrategy"
}
}
],
"responses": {
"200": {
"description": "Strategy successfully updated."
},
"401": {
"description": "Not authorized",
"schema": {
"$ref": "#/definitions/401"
}
},
"404": {
"description": "Strategy not updated due to errors in query and/or request body (such as **name** and **strategyName** not matching)."
}
},
"tags": [
"Strategies"
],
"description": "Use to update a Strategy definition.\n\n**name** and **strategyName** must match and must also match an existing Strategy name.\n\n**Caution: It can be dangerous to change a Strategy (as the implementation also might need to be changed).**\n",
"operationId": "updateStrategy",
"summary": "Update Strategy"
}
}
},
"definitions": {
"200": {
"properties": {
"features": {
"$ref": "#/definitions/featureToggleSchema"
},
"version": {
"$ref": "#/definitions/versionSchema"
}
},
"title": "Successful response",
"type": "object"
},
"401": {
"description": "Not authorized",
"title": "Unauthorized access",
"properties": {
"message": {
"minLength": 1,
"type": "string"
},
"path": {
"minLength": 1,
"type": "string"
},
"type": {
"minLength": 1,
"type": "string"
}
},
"required": [
"type",
"path",
"message"
],
"type": "object"
},
"409": {
"properties": {
"details": {
"items": {
"properties": {
"message": {
"description": "Error message",
"minLength": 1,
"type": "string"
}
},
"required": [
"message"
]
},
"minItems": 1,
"type": "array",
"uniqueItems": true
},
"isJoi": {
"description": "For internal use by the Unleash developers",
"type": "boolean"
},
"name": {
"description": "Title of error",
"minLength": 1,
"type": "string"
}
},
"required": [
"isJoi",
"name",
"details"
],
"title": "Error",
"type": "object"
},
"200-events": {
"properties": {
"events": {
"items": {
"properties": {
"createdAt": {
"description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
"example": "2016-12-09T14:56:36.730Z",
"type": "string"
},
"createdBy": {
"description": "The current user's *email* or *username* (taken from the *User* object on the current session)",
"minLength": 1,
"type": "string"
},
"data": {
"$ref": "#/definitions/featureToggleSchema"
},
"diffs": {
"externalDocs": {
"description": "Activation strategies",
"url": "https://www.npmjs.com/package/deep-diff#differences"
},
"description": "The JSON differences between the current and last version of the Feature Toggle.\n(Uses the [deep-diff Node.js module](https://www.npmjs.com/package/deep-diff))",
"items": {
"properties": {
"kind": {
"description": "The kind of change:\n- **N** - a newly-added property or element\n- **D** - a property or element was deleted\n- **E** - a property or element was edited\n- **A** - a change occurred within an array",
"enum": [
"N",
"D",
"E",
"A"
],
"example": "E",
"type": "string"
},
"lhs": {
"description": "The value on the left-hand-side of the comparison (*undefined* if **kind** is *N*)",
"example": true,
"type": "boolean"
},
"path": {
"items": {
"required": [
"pathItem"
]
},
"properties": {
"pathItem": {
"description": "The property path (from the left-hand-side root)",
"example": "enabled",
"type": "string"
}
},
"type": "array"
},
"rhs": {
"description": "The value on the right-hand-side of the comparison (*undefined* if **kind** is *D*)",
"example": false,
"type": "boolean"
}
},
"required": [
"kind",
"lhs",
"rhs"
]
},
"type": "array"
},
"id": {
"description": "The event number. All events have a unique id.",
"example": 55,
"type": "number"
},
"type": {
"description": "One of the six event types",
"enum": [
"feature-created",
"feature-updated",
"feature-archived",
"feature-revived",
"strategy-created",
"strategy-deleted"
],
"example": "feature-updated",
"minLength": 1,
"type": "string"
}
}
},
"minItems": 1,
"required": [
"id",
"type",
"createdBy",
"createdAt"
],
"type": "array",
"uniqueItems": true
},
"version": {
"$ref": "#/definitions/versionSchema"
}
},
"title": "Successful response",
"type": "object"
},
"200appdetails": {
"properties": {
"application": {
"$ref": "#/definitions/application"
},
"instances": {
"properties": {
"appName": {
"description": "Application name",
"example": "my-application",
"minLength": 1,
"type": "string"
},
"clientIp": {
"description": "The IP address of the system running this instance of the application",
"example": "::ffff:127.0.0.1",
"minLength": 1,
"type": "string"
},
"createdAt": {
"description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
"example": "2020-11-13T16:56:29.279Z",
"minLength": 1,
"type": "string"
},
"instanceId": {
"description": "The name of the system running the application",
"example": "generated-732038-17080",
"minLength": 1,
"type": "string"
},
"lastSeen": {
"description": "The last time the application 'talked' to Unleash (sent metrics, registered, fetched feature toggles) - in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime)",
"example": "2020-11-14T11:17:24.482Z",
"minLength": 1,
"type": "string"
},
"sdkVersion": {
"description": "The version of the Unleash client SDK running the application",
"example": "unleash-client-node:3.4.0",
"minLength": 1,
"type": "string"
}
},
"required": [
"appName",
"instanceId",
"sdkVersion",
"clientIp",
"lastSeen",
"createdAt"
],
"type": "object"
},
"links": {
"properties": {
"self": {
"description": "Deprecated. Do not use",
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"seenToggles": {
"$ref": "#/definitions/featureToggleSchema"
},
"strategies": {
"$ref": "#/definitions/strategySchema"
}
},
"required": [
"application",
"instances",
"strategies",
"seenToggles"
],
"title": "Successful response",
"type": "object"
},
"200export": {
"properties": {
"features": {
"$ref": "#/definitions/featureToggleSchema"
},
"strategies": {
"$ref": "#/definitions/strategySchema"
},
"version": {
"$ref": "#/definitions/versionSchema"
}
},
"required": [
"version",
"features",
"strategies"
],
"title": "Successful response",
"type": "object"
},
"200feature": {
"description": "- **lastHour** - how many times a Feature Toggle was accessed in the last hour.\n- **lastMinute** - how many times a Feature Toggle was accessed in the last minute.",
"items": {
"properties": {
"appName": {
"enum": [
"lastHour",
"lastMinute"
],
"example": "lastHour",
"minLength": 1,
"type": "string"
},
"seenToggles": {
"properties": {
"metricsCount": {
"type": "number"
},
"yesno": {
"enum": [
"yes",
"no"
],
"type": "string"
}
},
"required": [
"yesno",
"metricsCount"
],
"type": "object"
}
},
"required": [
"appName",
"seenToggles"
],
"title": "Feature Toggle metrics",
"type": "object"
},
"minItems": 1,
"title": "Successful response",
"type": "array",
"uniqueItems": true
},
"200featuretype": {
"properties": {
"types": {
"items": {
"properties": {
"description": {
"description": "A description of what this Feature Toggle type could be used for",
"enum": [
"Enables trunk-based development for teams practicing continuous delivery",
"Performs multivariate or A/B testing",
"Controls operational aspects of the system behavior",
"Gracefully degrades system functionality",
"Changes the features or product experiences that certain users receive"
],
"minLength": 1,
"type": "string"
},
"id": {
"$ref": "#/definitions/featureToggleTypeSchema"
},
"lifetimeDays": {
"externalDocs": {
"description": "Feature Toggle types",
"url": "https://unleash.github.io/docs/feature_toggle_types"
},
"description": "The number of days this Feature Toggle is intended to be used. This information is used to issue deprecation notices",
"example": 40,
"type": "number"
},
"name": {
"description": "The title of the Feature Toggle type",
"enum": [
"Release",
"Experiment",
"Operational",
"Kill switch",
"Permission"
],
"example": "Release",
"minLength": 1,
"type": "string"
}
},
"required": [
"id",
"name",
"description",
"lifetimeDays"
]
},
"minItems": 1,
"type": "array",
"uniqueItems": true
},
"version": {
"$ref": "#/definitions/versionSchema"
}
},
"required": [
"version",
"types"
],
"title": "Successful response",
"type": "object"
},
"200seen": {
"items": {
"properties": {
"appName": {
"minLength": 1,
"type": "string"
},
"metricsCount": {
"type": "number"
},
"seenToggles": {
"items": {
"properties": {}
},
"type": "array"
}
},
"required": [
"appName",
"seenToggles",
"metricsCount"
],
"title": "Feature Toggle information",
"type": "object"
},
"minItems": 1,
"title": "Successful response",
"type": "array",
"uniqueItems": true
},
"200strategy": {
"properties": {
"strategies": {
"$ref": "#/definitions/strategySchema"
},
"version": {
"$ref": "#/definitions/versionSchema"
}
},
"required": [
"version",
"strategies"
],
"title": "Successful response",
"type": "object"
},
"application": {
"properties": {
"applications": {
"items": {
"properties": {
"appName": {
"description": "Application name",
"example": "my-application",
"type": "string"
},
"color": {
"description": "Deprecated. Do not use",
"type": "string"
},
"createdAt": {
"description": "The first time the application registered with Unleash (in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime))",
"example": "2016-12-09T14:56:36.730Z",
"type": "string"
},
"description": {
"description": "A description of what the application does",
"type": "string"
},
"icon": {
"description": "The application's icon. Must be one of the [Material Design icon names](https://material.io/resources/icons/?style=baseline)",
"example": "comment_bank",
"type": "string"
},
"strategies": {
"description": "A description of what the application does",
"type": "string"
},
"updatedAt": {
"description": "The last time the application 'talked' to Unleash (sent metrics, registered, fetched feature toggles) - in [ISO8601 format](https://www.w3.org/TR/NOTE-datetime)",
"example": "2020-11-14T09:55:23.653Z",
"type": "string"
},
"url": {
"description": "Absolute URL to the actual application",
"example": "http://someapp.internal.url",
"type": "string"
}
},
"required": [
"appName",
"createdAt",
"updatedAt",
"strategies"
]
},
"minItems": 1,
"type": "array",
"uniqueItems": true
}
},
"required": [
"applications"
],
"title": "Application details",
"type": "object"
},
"applicationArray": {
"items": {
"$ref": "#/definitions/application"
},
"title": "List of applications",
"type": "array"
},
"createStrategy": {
"properties": {
"parameters": {
"items": {
"properties": {
"description": {
"example": "What percent of users should the new Feature Toggle be active for?",
"minLength": 1,
"type": "string"
},
"name": {
"example": "percentage",
"minLength": 1,
"type": "string"
},
"required": {
"example": true,
"type": "boolean"
},
"type": {
"example": "percentage",
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"type",
"description",
"required"
]
},
"minItems": 1,
"type": "array",
"uniqueItems": true
},
"description": {
"example": "Gradual rollout to logged in users",
"minLength": 1,
"type": "string"
},
"name": {
"example": "gradualRollout",
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"description",
"parameters"
],
"title": "Strategy",
"type": "object"
},
"featureToggleSchema": {
"items": {
"properties": {
"createdAt": {
"minLength": 1,
"type": "string"
},
"description": {
"example": "Toggles featureX on and off",
"minLength": 1,
"type": "string"
},
"enabled": {
"description": "Is the Feature Toggle enabled?",
"example": true,
"type": "boolean"
},
"name": {
"description": "Feature Toggle name must be unique.",
"example": "featureX",
"minLength": 1,
"type": "string"
},
"stale": {
"description": "Is the Feature Toggle 'stale' (deprecated)?",
"example": false,
"type": "boolean"
},
"strategies": {
"$ref": "#/definitions/strategySchema"
},
"type": {
"$ref": "#/definitions/featureToggleTypeSchema"
},
"variants": {
"$ref": "#/definitions/variantsSchema"
}
},
"required": [
"name",
"description",
"type",
"enabled",
"stale",
"strategies"
],
"title": "Feature Toggle items",
"type": "object"
},
"title": "Feature Toggle",
"type": "array"
},
"featureToggleTypeSchema": {
"externalDocs": {
"description": "Feature Toggle types",
"url": "https://unleash.github.io/docs/feature_toggle_types"
},
"default": "release",
"description": "'One of the five Unleash Feature Toggle types.\n\n**type** is optional. If not defined, it defaults to *release*'",
"enum": [
"release",
"experiment",
"ops",
"killswitch",
"permission"
],
"example": "release",
"minLength": 1,
"title": "Types of Feature Toggle",
"type": "string"
},
"strategySchema": {
"items": {
"properties": {
"parameters": {
"properties": {
"parameter": {
"properties": {
"description": {
"description": "What the parameter does",
"example": "Define activation groups to allow you to correlate across feature toggles.",
"type": "string"
},
"name": {
"description": "The name of the parameter",
"example": "groupId",
"type": "string"
},
"required": {
"description": "Is this a required parameter?",
"example": false,
"type": "boolean"
},
"type": {
"description": "The type of the parameter",
"example": "string",
"type": "string"
}
},
"required": [
"name",
"type"
],
"type": "object"
}
},
"type": "object"
},
"description": {
"description": "What the Strategy is",
"example": "Default on/off strategy.",
"type": "string"
},
"editable": {
"example": true,
"type": "boolean"
},
"name": {
"description": "Name of the Strategy",
"example": "default",
"minLength": 1,
"type": "string"
}
},
"type": "object"
},
"title": "Strategy",
"type": "array"
},
"variantsSchema": {
"externalDocs": {
"description": "How to use Feature Toggle variants",
"url": "https://unleash.github.io/docs/toggle_variants"
},
"items": {
"properties": {
"name": {
"description": "The name of the Feature Toggle variant",
"example": "yellow",
"minLength": 1,
"type": "string"
},
"weight": {
"description": "A number between 0 and 1,000.\nThe client SDK will summarize all variant weights, hash the number and divide the users among them. The distribution will be according to the weight as a fraction of the sum of weight.",
"example": 20,
"type": "number"
}
},
"required": [
"name",
"weight"
]
},
"type": "array"
},
"versionSchema": {
"description": "For internal use by the Unleash developers",
"example": 1,
"title": "Internal version number",
"type": "number"
}
},
"tags": [
{
"description": "Handling Feature Toggle archiving and un-archiving",
"name": "Archive"
},
{
"description": "Identifying events on the Unleash server",
"name": "Events"
},
{
"description": "Accessing feature toggles",
"name": "Feature toggles"
},
{
"description": "Details of the five Unleash Feature Toggle types",
"name": "Feature types"
},
{
"description": "Importing and exporting feature toggles and strategies",
"name": "Import and export"
},
{
"description": "Determining usage of feature toggles and applications",
"name": "Metrics"
},
{
"description": "Accessing and updating strategies",
"name": "Strategies"
}
],
"externalDocs": {
"description": "Unleash documentation",
"url": "https://unleash.github.io/docs/getting_started"
},
"x-components": {
"parameters": {
"appNamePath": {
"description": "Must match an existing application name.",
"in": "path",
"name": "appName",
"required": true,
"type": "string",
"x-example": "my-application"
},
"featureNamePath": {
"description": "Must match an existing Feature Toggle name.",
"in": "path",
"name": "featureName",
"required": true,
"type": "string",
"x-example": "featureX"
},
"strategyNamePath": {
"description": "Must match an existing Strategy name.",
"in": "path",
"name": "strategyName",
"required": true,
"type": "string",
"x-example": "flexibleRollout"
}
}
}
}