Skip to main content
Custom features let you define plan-specific values that don’t fit neatly into on/off flags or metered usage. They’re perfect for expressing numeric or text limits that your app reads and enforces.

Use Cases

  • Seat limits: “Max 5 team members”
  • Retention: “90-day data retention”
  • Storage quotas: “10 GB storage”
  • Support tier: “Priority support”
  • Custom rate limits: “500 requests/minute”

Creating a Custom Feature

curl -X POST https://api.fluxrate.co/api/v1/features \
  -H "Content-Type: application/json" \
  -H "Cookie: access_token=<token>" \
  -d '{
    "name": "Max Team Members",
    "lookup_key": "max_team_members",
    "description": "Maximum number of team members allowed",
    "type": "custom"
  }'

Attaching with a Value

When attaching a custom feature to a plan, set static_value to the plan-specific entitlement:
# Starter plan: 3 team members
curl -X POST https://api.fluxrate.co/api/v1/plans/<starter_plan_id>/features \
  -H "Content-Type: application/json" \
  -H "Cookie: access_token=<token>" \
  -d '{
    "feature_id": "<feature_id>",
    "is_enabled": true,
    "static_value": "3"
  }'

# Pro plan: 25 team members
curl -X POST https://api.fluxrate.co/api/v1/plans/<pro_plan_id>/features \
  -H "Content-Type: application/json" \
  -H "Cookie: access_token=<token>" \
  -d '{
    "feature_id": "<feature_id>",
    "is_enabled": true,
    "static_value": "25"
  }'

# Enterprise plan: unlimited
curl -X POST https://api.fluxrate.co/api/v1/plans/<enterprise_plan_id>/features \
  -H "Content-Type: application/json" \
  -H "Cookie: access_token=<token>" \
  -d '{
    "feature_id": "<feature_id>",
    "is_enabled": true,
    "static_value": "unlimited"
  }'

Reading the Value in Your App

Fetch the customer’s subscription features to read the static_value, then enforce it in your application logic:
# Example: enforce seat limit before adding a team member
subscription = get_customer_subscription(customer_id)
max_seats_feature = next(
    f for f in subscription.plan.features 
    if f.lookup_key == "max_team_members"
)

max_seats = int(max_seats_feature.static_value)
current_seats = get_current_seat_count(customer_id)

if current_seats >= max_seats:
    raise Exception("Seat limit reached. Please upgrade your plan.")
Custom features store static_value as a string. Parse it to the appropriate type (integer, float, boolean) in your application.