---
title: "Create a new feature"
method: POST
path: "/subscription/features"
tags: ["Features"]
---

# Create a new feature

`POST /subscription/features`

## Request

- Base URL: `https://app.mammoth.io/api/v2`
- URL: `https://app.mammoth.io/api/v2/subscription/features`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-KEY` and API key in header `X-API-SECRET` and API key in header `X-WORKSPACE-ID`

## Request body

- CreateFeatureRequestSchema
  - `name` string, required: Feature name
  - `description` string, nullable: Feature description
  - `price_per_month` number: Monthly price in USD
  - `enabled` boolean: Whether feature is enabled
  - `rollout_default` string, nullable: How a catalog change reaches live deals that do not state this item: retroactive = follows the base plan; opt_in = the deal keeps its old value until opted in
  - `kind` string, nullable: capacity | meter | enum | switch. Structural: it decides how every plan value stored under this key is read, and cannot be changed after creation
  - `unit` string, nullable: Display unit, e.g. GB, /mo, days
  - `group_name` string, nullable: Scale | Access | Brand | Governance | Service. NULL means the key is NEVER GATED: granted on every plan and listed apart
  - `enforcement` string, nullable: enforced | unenforced | unbuilt | unconfirmed | split | commitment. Anything but 'enforced' requires a note
  - `note` string, nullable: What the product actually does today. REQUIRED when enforcement is not 'enforced' — the badge alone cannot be used by the person quoting the limit
  - `values` string[], nullable: Allowed values for the feature

## Response `201`

Document created, URL follows

- FeatureResponseSchema
  - `feature` SubscriptionsSchemaFeatureSchema, required
    - `id` integer, required
    - `name` string, required
    - `description` string, nullable
    - `enabled` boolean, required
    - `kind` string, nullable: capacity | meter | enum | switch
    - `unit` string, nullable: Display unit (GB, /mo, days)
    - `group_name` string, nullable: Scale | Access | Brand | Governance | Service. NULL means the key is NEVER GATED — granted on every plan, listed apart from the registry
    - `enforcement` string, nullable: enforced | unenforced | unbuilt | unconfirmed | split | commitment
    - `note` string, nullable: What the product actually does today
    - `created_at` string, nullable
    - `updated_at` string, nullable
    - `used_in_profiles` string[], nullable
    - `values` string[], nullable
    - `value` string, nullable
    - `profile_count` integer, nullable
    - `number_of_values` integer, nullable
  - `message` string, required

## Other responses

- `400`: Bad request syntax or unsupported method

---

[API](https://skmtc.dev/mammoth/apis/mammoth-analytics.md) · [All operations](https://skmtc.dev/mammoth/apis/mammoth-analytics/llms.txt) · [OpenAPI document](https://skmtc.dev/mammoth/apis/mammoth-analytics/revisions/5dfd1c296ded?raw)
