Skip to content

Features API

Base: /api/organizations/{organization_id}/features

Create feature

POST /api/organizations/{organization_id}/features
{
  "key": "sso",
  "name": "SSO",
  "kind": "flag",
  "description": "Single sign-on"
}

Limit example:

{
  "key": "seats",
  "name": "Seats",
  "kind": "limit"
}
Field Required Rules
key yes lowercase letters, numbers, underscores, dashes; unique per org; immutable
kind yes flag | limit, immutable
name yes 1–255 chars
description no max 2000

201 — feature object

409key already exists

List features

GET /api/organizations/{organization_id}/features

200

{
  "features": [
    {
      "id": "01H…",
      "key": "sso",
      "name": "SSO",
      "description": "Single sign-on",
      "kind": "flag",
      "created_at": "2026-01-15T12:00:00.000Z",
      "updated_at": "2026-01-15T12:00:00.000Z"
    },
    {
      "id": "01H…",
      "key": "seats",
      "name": "Seats",
      "description": "",
      "kind": "limit",
      "created_at": "2026-01-15T12:00:00.000Z",
      "updated_at": "2026-01-15T12:00:00.000Z"
    }
  ]
}

Get feature

By id:

GET /api/organizations/{organization_id}/features/{feature_id}

By key:

GET /api/organizations/{organization_id}/features/by-key/{key}

200 — feature · 404 — not found

Update feature

PATCH /api/organizations/{organization_id}/features/{feature_id}
{
  "name": "SSO (SAML/OIDC)",
  "description": "Updated copy"
}

key and kind cannot change.

200 — feature

Delete feature

DELETE /api/organizations/{organization_id}/features/{feature_id}

204 — deleted

409 — feature is still referenced by a plan or an override