Stripe: List all features attached to a product
Stripe products.getProductsProductFeatures: arguments, response, policy and SDK examples.
← Products operations · Get started
Operation stripe.getproductsproductfeatures
Provider route: GET /v1/products/{product}/features. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”Install @alter-ai/sdk @alter-ai/stripe with npm, or alter-sdk-stripe with pip. Supply your connected customer’s grant ID and the arguments described below.
import { App } from "@alter-ai/sdk";import { StripeIntegration } from "@alter-ai/stripe";
async function execute(input: Parameters<StripeIntegration["products"]["getProductsProductFeatures"]>[0]) { const app = new App({ apiKey: process.env.ALTER_API_KEY! }); try { const provider = new StripeIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! }); const call = await provider.products.getProductsProductFeatures(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom alter_sdk_stripe import StripeIntegration
async def execute(arguments): async with App(api_key=os.environ["ALTER_API_KEY"]) as app: provider = StripeIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]}) call = await provider.products.get_products_product_features(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
path | object | Required within parent | Additional keys: not allowed |
path.product | string | Required within parent | Maximum length: 5000 |
query | object | Optional | Additional keys: not allowed |
query.ending_before | string | Optional | Maximum length: 5000 |
query.expand | array | Optional | |
query.expand[] | string | Each item | Maximum length: 5000 |
query.limit | integer | Optional | |
query.starting_after | string | Optional | Maximum length: 5000 |
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
data | array | Required within parent | |
data[] | Model | Each item | Expand Retrieve a product feature — response body |
has_more | boolean | Required within parent | True if this list has another page of items after this one that can be fetched. |
object | string | Required within parent | String representing the object’s type. Objects of the same type share the same value. Always has the value `list`. Known values: list |
url | string | Required within parent | The URL where this list can be accessed. Maximum length: 5000 |
Referenced models: Retrieve a product feature — response body
Schemas
Section titled “Schemas”Retrieve a product feature — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | A product_feature represents an attachment between a feature and a product. When a product is purchased that has a feature attached, Stripe will create an entitlement to the feature for the purchasing customer. |
entitlement_feature | Model | Required within parent | Expand Create a feature — response body |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
livemode | boolean | Required within parent | If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`. |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: product_feature |
Referenced models: Create a feature — response body
Create a feature — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | A feature represents a monetizable ability or functionality in your system. Features can be assigned to products, and when those products are purchased, Stripe will create an entitlement to the feature for the purchasing customer. |
active | boolean | Required within parent | Inactive features cannot be attached to new products and will not be returned from the features list endpoint. |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
livemode | boolean | Required within parent | If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`. |
lookup_key | string | Required within parent | A unique key you provide as your own system identifier. This may be up to 80 characters. Maximum length: 5000 |
metadata | object | Required within parent | Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Additional keys: see wildcard field |
metadata.* | string | Additional keys | Maximum length: 500 |
name | string | Required within parent | The feature's name, for your own purpose, not meant to be displayable to the customer. Maximum length: 80 |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: entitlements.feature |
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: stripe.getproductsproductfeatures. Catalog operation: GetProductsProductFeatures. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.
Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.
Pinned headers: {"Stripe-Version": "2026-09-30.endive"}