Product Catalog API
Manage applications, environments, features, and plans.
Applications
Create application
POST/v1/applications
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name |
slug | string | Yes | URL-safe identifier |
json
{
"name": "My SaaS App",
"slug": "my-saas-app"
}List applications
GET/v1/applications
Returns all applications for the authenticated tenant.
Update application
PATCH/v1/applications/:id
json
{ "name": "Renamed App" }Environments
Create environment
POST/v1/applications/:app_id/environments
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name (e.g., "Production") |
slug | string | Yes | URL-safe identifier (e.g., "production") |
json
{
"name": "Production",
"slug": "production"
}List environments
GET/v1/applications/:app_id/environments
Returns all environments for a given application.
Features
Create feature
POST/v1/features
| Field | Type | Required | Description |
|---|---|---|---|
key | string | Yes | Unique feature key |
name | string | Yes | Display name |
description | string | No | Human-readable description |
unit | string | No | Unit of measurement (e.g., "requests", "seats") |
default_quota_limit | number | No | Default quota limit for this feature |
json
{
"key": "api-requests",
"name": "API Requests",
"description": "Number of API requests per billing period",
"unit": "requests",
"default_quota_limit": 10000
}List features
GET/v1/features
Returns all features for the authenticated tenant.
Get feature by key
GET/v1/features/:key
Retrieve a single feature by its key.
Update feature
PATCH/v1/features/:id
json
{ "name": "Updated Feature Name", "default_quota_limit": 20000 }Plans
Create plan
POST/v1/applications/:app_id/plans
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name (e.g., "Pro") |
slug | string | Yes | URL-safe identifier (e.g., "pro") |
is_free_tier | boolean | No | Whether this is the free tier (default: false) |
json
{
"name": "Pro",
"slug": "pro",
"is_free_tier": false
}List plans
GET/v1/applications/:app_id/plans
Returns all plans for a given application.
Update plan
PATCH/v1/plans/:id
json
{ "name": "Pro Plus", "is_free_tier": false }Plan-Feature Bindings
Bind features to plans with specific quota limits, reset periods, and enforcement modes.
Set plan-feature quota
PUT/v1/plans/:plan_id/features/:feature_id
| Field | Type | Required | Description |
|---|---|---|---|
quota_limit | number | Yes | Usage limit for this feature on this plan |
reset_period | string | Yes | "monthly" | "daily" | "yearly" | "never" |
enforcement | string | Yes | "hard_cap" | "soft_cap" |
json
{
"quota_limit": 50000,
"reset_period": "monthly",
"enforcement": "hard_cap"
}List plan features
GET/v1/plans/:plan_id/features
Returns all feature bindings for a given plan, including their quota limits and enforcement settings.
Remove plan-feature binding
DELETE/v1/plans/:plan_id/features/:feature_id
Removes a feature from a plan. Existing customers on this plan will lose quota enforcement for this feature.