Skip to main content

Feature Toggles

Explore the API
Launch the OpenAPI Explorer to browse the live REST specs, inspect request and response schemas, and execute calls against your environment with an API key.

The Feature Toggles API enables programmatic access to feature flag management, overrides, and status checks. Use these endpoints to integrate feature toggles into your applications and workflows.

Base URL

/api/feature_toggles

Authentication

All Feature Toggles API endpoints require authentication. Include your API key or session token in the request headers.

Note: All admin-related endpoints require the Super Admin role. The check endpoint only requires authentication.

curl -X GET "$BASE_URL/feature_toggles/global" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Accept: application/json"

Multi-Tenant Scoping

All endpoints are automatically scoped to your tenant based on your authentication context. You cannot access toggles or overrides from other tenants unless explicitly authorized.

export BASE_URL="http://localhost:3000/api"
export API_KEY="<paste your API key secret here>"

Use an API key with appropriate permissions for feature toggle management.

Global

List Global Toggles — GET /feature_toggles/global

Query parameters (selected):

  • page, pageSize — pagination (default 1, 50).
  • search — case-insensitive match on identifier, name, description, category.
  • category — filter by category.
  • name — filter by name.
  • identifier — filter by identifier.
  • type — filter by toggle type (boolean, string, number, json).
  • sortFieldid, category, identifier, name, createdAt, updatedAt, type.
  • sortDirasc, desc.
curl -X GET "$BASE_URL/feature_toggles/global?page=1&pageSize=50" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"items": [
{
"id": "uuid-of-toggle",
"identifier": "new-feature",
"name": "New Feature",
"description": "Description of the new feature",
"category": "experimental",
"type": "boolean",
"defaultValue": false,
"created_at": "2025-12-29 21:59:25.246+00",
"updated_at": "2025-12-29 21:59:25.246+00"
}
],
"total": 1,
"totalPages": 1,
"page": 1,
"pageSize": 50
}

Get Global Toggle — GET /feature_toggles/global/{id}

Get details of a specific feature toggle.

curl -X GET "$BASE_URL/feature_toggles/global/$TOGGLE_ID" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"id": "uuid-of-toggle",
"identifier": "new-feature",
"name": "New Feature",
"description": "Description of the new feature",
"category": "experimental",
"type": "boolean",
"defaultValue": false,
"created_at": "2025-12-29 21:59:25.246+00",
"updated_at": "2025-12-29 21:59:25.246+00"
}

Create Global Toggle — POST /feature_toggles/global

Body must satisfy toggleCreateSchema:

  • Required: identifier (lowercase, numbers, underscores), name, type (boolean, string, number, json).
  • Optional: description, category, defaultValue (any, defaults to null).
curl -X POST "$BASE_URL/feature_toggles/global" \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"identifier": "new-feature",
"name": "New Feature",
"description": "Description of the new feature",
"category": "experimental",
"type": "boolean",
"defaultValue": false
}'

Response:

{ "id": "uuid-of-new-toggle" }

Update Global Toggle — PUT /feature_toggles/global

Send id and any mutable fields from the create schema.

  • Required: id.
  • Optional: identifier, name, description, category, defaultValue.
curl -X PUT "$BASE_URL/feature_toggles/global" \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "uuid-of-toggle",
"name": "Updated Feature Name",
"defaultValue": true
}'

Response:

{ "id": "uuid-of-toggle" }

Delete Global Toggle — DELETE /feature_toggles/global

Delete a feature toggle.

  • Required: id (in body).
curl -X DELETE "$BASE_URL/feature_toggles/global" \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "uuid-of-toggle"
}'

Response:

{ "id": "uuid-of-toggle" }

Global Specific Override — GET /feature_toggles/global/{id}/override

Query parameters:

  • No parameters required.

Get specific override for a feature toggle in current tenant context.

# Get override for a specific toggle
curl -X GET "$BASE_URL/feature_toggles/global/$TOGGLE_ID/override" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"id": "uuid-of-override",
"value": true,
"tenantName": "Tenant Name",
"tenantId": "uuid-of-tenant",
"toggleType": "boolean"
}

Overrides

List All Overrides — GET /feature_toggles/overrides

Query parameters:

  • page, pageSize — pagination (default 1, 25).
  • category — filter by category.
  • name — filter by name.
  • identifier — filter by identifier.
  • sortField - identifier, name, category.
  • sortDirasc, desc.
curl -X GET "$BASE_URL/feature_toggles/overrides?page=1&pageSize=50" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"items": [
{
"id": "uuid-of-override",
"toggleId": "uuid-of-toggle",
"tenantId": "uuid-of-tenant",
"identifier": "new-feature",
"name": "New Feature",
"category": "experimental",
"tenantName": "Tenant Name",
"isOverride": true
}
],
"total": 1,
"totalPages": 1,
"page": 1,
"pageSize": 50,
"isSuperAdmin": false
}

Update Override — PUT /feature_toggles/overrides

Change the state of a feature toggle override.

  • Required: toggleId, isOverride (boolean).
  • Optional: overrideValue (any).

Note: The tenantId is automatically resolved from the request context.

curl -X PUT "$BASE_URL/feature_toggles/overrides" \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"toggleId": "uuid-of-toggle",
"isOverride": true,
"overrideValue": true
}'

Response:

{
"ok": true,
"overrideToggleId": "uuid-of-override"
}

Check

Check if a feature is enabled and get its configuration value for the current context.

Check Boolean Feature — GET /feature_toggles/check/boolean

Query parameters:

  • identifier — (required) feature toggle identifier.
curl -X GET "$BASE_URL/feature_toggles/check/boolean?identifier=new-feature" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"enabled": true,
"source": "override",
"toggleId": "uuid-of-toggle",
"identifier": "new-feature",
"tenantId": "uuid-of-tenant"
}

Check String Feature — GET /feature_toggles/check/string

Query parameters:

  • identifier — (required) feature toggle identifier.
curl -X GET "$BASE_URL/feature_toggles/check/string?identifier=my-string-feature" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"valueType": "string",
"value": "some-string-value",
"source": "default",
"toggleId": "uuid-of-toggle",
"identifier": "my-string-feature",
"tenantId": "uuid-of-tenant"
}

Check Number Feature — GET /feature_toggles/check/number

Query parameters:

  • identifier — (required) feature toggle identifier.
curl -X GET "$BASE_URL/feature_toggles/check/number?identifier=my-number-feature" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"valueType": "number",
"value": 42,
"source": "default",
"toggleId": "uuid-of-toggle",
"identifier": "my-number-feature",
"tenantId": "uuid-of-tenant"
}

Check JSON Feature — GET /feature_toggles/check/json

Query parameters:

  • identifier — (required) feature toggle identifier.
curl -X GET "$BASE_URL/feature_toggles/check/json?identifier=my-json-feature" \
-H "X-Api-Key: $API_KEY" \
-H "Accept: application/json"

Response:

{
"valueType": "json",
"value": { "key": "value" },
"source": "default",
"toggleId": "uuid-of-toggle",
"identifier": "my-json-feature",
"tenantId": "uuid-of-tenant"
}