import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const feature = await client.v1.features.createFeature({
id: 'id',
displayName: 'displayName',
featureType: 'BOOLEAN',
});
console.log(feature.data);import os
from stigg import Stigg
client = Stigg(
api_key=os.environ.get("STIGG_API_KEY"), # This is the default and can be omitted
)
feature = client.v1.features.create_feature(
id="id",
display_name="displayName",
feature_type="BOOLEAN",
)
print(feature.data)package main
import (
"context"
"fmt"
"github.com/stiggio/stigg-go"
"github.com/stiggio/stigg-go/option"
)
func main() {
client := stigg.NewClient(
option.WithAPIKey("My API Key"),
)
feature, err := client.V1.Features.NewFeature(context.TODO(), stigg.V1FeatureNewFeatureParams{
ID: "id",
DisplayName: "displayName",
FeatureType: stigg.V1FeatureNewFeatureParamsFeatureTypeBoolean,
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", feature.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.features.Feature;
import io.stigg.models.v1.features.FeatureCreateFeatureParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
FeatureCreateFeatureParams params = FeatureCreateFeatureParams.builder()
.id("id")
.displayName("displayName")
.featureType(FeatureCreateFeatureParams.FeatureType.BOOLEAN)
.build();
Feature feature = client.v1().features().createFeature(params);
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
feature = stigg.v1.features.create_feature(id: "id", display_name: "displayName", feature_type: :BOOLEAN)
puts(feature)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Features;
StiggClient client = new();
FeatureCreateFeatureParams parameters = new()
{
ID = "id",
DisplayName = "displayName",
FeatureType = FeatureType.Boolean,
};
var feature = await client.V1.Features.CreateFeature(parameters);
Console.WriteLine(feature);stigg v1:features create-feature \
--api-key 'My API Key' \
--id id \
--display-name displayName \
--feature-type BOOLEANcurl --request POST \
--url https://api.stigg.io/api/v1/features \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"id": "<string>",
"displayName": "<string>",
"description": "<string>",
"featureStatus": "ACTIVE",
"featureUnits": "<string>",
"featureUnitsPlural": "<string>",
"metadata": {},
"unitTransformation": {
"divide": 123,
"round": "UP",
"featureUnits": "<string>",
"featureUnitsPlural": "<string>"
},
"enumConfiguration": [
{
"value": "<string>",
"displayName": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/features",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'displayName' => '<string>',
'description' => '<string>',
'featureStatus' => 'ACTIVE',
'featureUnits' => '<string>',
'featureUnitsPlural' => '<string>',
'metadata' => [
],
'unitTransformation' => [
'divide' => 123,
'round' => 'UP',
'featureUnits' => '<string>',
'featureUnitsPlural' => '<string>'
],
'enumConfiguration' => [
[
'value' => '<string>',
'displayName' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"id": "feature-api-calls",
"displayName": "API Calls",
"description": "Number of API calls allowed per month",
"featureType": "NUMBER",
"meterType": "INCREMENTAL",
"featureUnits": "call",
"featureUnitsPlural": "calls",
"featureStatus": "ACTIVE",
"unitTransformation": null,
"enumConfiguration": null,
"meter": {
"filters": [
{
"conditions": [
{
"operation": "EQUALS",
"field": "eventName",
"value": "api_call"
}
]
}
],
"aggregation": {
"function": "SUM",
"field": "amount"
}
},
"metadata": {},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z"
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "DuplicatedEntityNotAllowed"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Create a feature
Creates a new feature with the specified type, metering, and configuration.
import Stigg from '@stigg/typescript';
const client = new Stigg({
apiKey: process.env['STIGG_API_KEY'], // This is the default and can be omitted
});
const feature = await client.v1.features.createFeature({
id: 'id',
displayName: 'displayName',
featureType: 'BOOLEAN',
});
console.log(feature.data);import os
from stigg import Stigg
client = Stigg(
api_key=os.environ.get("STIGG_API_KEY"), # This is the default and can be omitted
)
feature = client.v1.features.create_feature(
id="id",
display_name="displayName",
feature_type="BOOLEAN",
)
print(feature.data)package main
import (
"context"
"fmt"
"github.com/stiggio/stigg-go"
"github.com/stiggio/stigg-go/option"
)
func main() {
client := stigg.NewClient(
option.WithAPIKey("My API Key"),
)
feature, err := client.V1.Features.NewFeature(context.TODO(), stigg.V1FeatureNewFeatureParams{
ID: "id",
DisplayName: "displayName",
FeatureType: stigg.V1FeatureNewFeatureParamsFeatureTypeBoolean,
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", feature.Data)
}
package io.stigg.example;
import io.stigg.client.StiggClient;
import io.stigg.client.okhttp.StiggOkHttpClient;
import io.stigg.models.v1.features.Feature;
import io.stigg.models.v1.features.FeatureCreateFeatureParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
StiggClient client = StiggOkHttpClient.fromEnv();
FeatureCreateFeatureParams params = FeatureCreateFeatureParams.builder()
.id("id")
.displayName("displayName")
.featureType(FeatureCreateFeatureParams.FeatureType.BOOLEAN)
.build();
Feature feature = client.v1().features().createFeature(params);
}
}require "stigg"
stigg = Stigg::Client.new(api_key: "My API Key")
feature = stigg.v1.features.create_feature(id: "id", display_name: "displayName", feature_type: :BOOLEAN)
puts(feature)using System;
using Stigg.Client;
using Stigg.Client.Models.V1.Features;
StiggClient client = new();
FeatureCreateFeatureParams parameters = new()
{
ID = "id",
DisplayName = "displayName",
FeatureType = FeatureType.Boolean,
};
var feature = await client.V1.Features.CreateFeature(parameters);
Console.WriteLine(feature);stigg v1:features create-feature \
--api-key 'My API Key' \
--id id \
--display-name displayName \
--feature-type BOOLEANcurl --request POST \
--url https://api.stigg.io/api/v1/features \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"id": "<string>",
"displayName": "<string>",
"description": "<string>",
"featureStatus": "ACTIVE",
"featureUnits": "<string>",
"featureUnitsPlural": "<string>",
"metadata": {},
"unitTransformation": {
"divide": 123,
"round": "UP",
"featureUnits": "<string>",
"featureUnitsPlural": "<string>"
},
"enumConfiguration": [
{
"value": "<string>",
"displayName": "<string>"
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.stigg.io/api/v1/features",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'displayName' => '<string>',
'description' => '<string>',
'featureStatus' => 'ACTIVE',
'featureUnits' => '<string>',
'featureUnitsPlural' => '<string>',
'metadata' => [
],
'unitTransformation' => [
'divide' => 123,
'round' => 'UP',
'featureUnits' => '<string>',
'featureUnitsPlural' => '<string>'
],
'enumConfiguration' => [
[
'value' => '<string>',
'displayName' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"data": {
"id": "feature-api-calls",
"displayName": "API Calls",
"description": "Number of API calls allowed per month",
"featureType": "NUMBER",
"meterType": "INCREMENTAL",
"featureUnits": "call",
"featureUnitsPlural": "calls",
"featureStatus": "ACTIVE",
"unitTransformation": null,
"enumConfiguration": null,
"meter": {
"filters": [
{
"conditions": [
{
"operation": "EQUALS",
"field": "eventName",
"value": "api_call"
}
]
}
],
"aggregation": {
"function": "SUM",
"field": "amount"
}
},
"metadata": {},
"createdAt": "2025-10-26T10:00:00.000Z",
"updatedAt": "2025-10-26T10:00:00.000Z"
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "DuplicatedEntityNotAllowed"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Authorizations
Server API Key
Headers
Account ID — optional when authenticating with a user JWT (Bearer token); falls back to the user's first membership. Ignored for API-key auth.
Environment ID — required when authenticating with a user JWT (Bearer token) on environment-scoped endpoints. Ignored for API-key auth (env is intrinsic to the key).
Body
Create a new feature with type, optional metering, and configuration.
The unique identifier for the feature
1 - 255^[a-zA-Z0-9][a-zA-Z0-9_|.-]*$The display name for the feature
255The type of the feature: BOOLEAN (on/off access), NUMBER (a numeric limit or quantity), or ENUM (one of a fixed set of values).
BOOLEAN, NUMBER, ENUM The description for the feature
255How usage accumulates for this feature. Incremental and Fluctuating features track usage from reported events; None means the feature's value isn't usage-tracked — it's just a numeric or enum value carried by the plan (for example, a seat count or a tier setting) rather than something customers consume.
None, FLUCTUATING, INCREMENTAL The status of the feature
NEW, SUSPENDED, ACTIVE The units for the feature
255The plural units for the feature
255The additional metadata for the feature
Show child attributes
Show child attributes
Unit transformation to be applied to the reported usage
Show child attributes
Show child attributes
The configuration data for the feature
1 - 255 elementsShow child attributes
Show child attributes
Event meter that turns reported events into usage for a metered feature
Show child attributes
Show child attributes
Response
The newly created feature object.
Response object
Feature configuration object
Show child attributes
Show child attributes
Related topics
Create plan entitlementsCreate addon entitlementsConfigure hybrid pricingExample - OpenAI pricingLaunch a trial for a paid plan with unlimited usage-based features