Skip to content

Stripe: Create a product

Stripe products.postProducts: arguments, response, policy and SDK examples.

← Products operations · Get started

Operation stripe.postproducts

Provider route: POST /v1/products. Alter supplies the connection’s credentials and routing.

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"]["postProducts"]>[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.postProducts(input);
const result = await call.wait();
return result.bodyJson();
} finally {
await app.close();
}
}
import os
from alter_sdk import App
from 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.post_products(arguments)
result = await call.wait()
return result.body_json()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
headersobjectOptionalAdditional keys: not allowed
headers.Idempotency-KeystringOptionalMinimum length: 1
Maximum length: 255
bodyobjectRequired within parentAdditional keys: not allowed
body.activebooleanOptionalWhether the product is currently available for purchase. Defaults to `true`.
body.default_price_dataobjectOptionalData used to generate a new [Price](https://docs.stripe.com/api/prices) object. This Price will be set as the default price for this product.
body.default_price_data.currencystringRequired within parentFormat: currency
body.default_price_data.currency_optionsobjectOptionalAdditional keys: see wildcard field
body.default_price_data.currency_options.*ModelAdditional keysExpand Create a price — request body — body currency options value
body.default_price_data.custom_unit_amountobjectOptional
body.default_price_data.custom_unit_amount.enabledbooleanRequired within parent
body.default_price_data.custom_unit_amount.maximumintegerOptional
body.default_price_data.custom_unit_amount.minimumintegerOptional
body.default_price_data.custom_unit_amount.presetintegerOptional
body.default_price_data.metadataobjectOptionalAdditional keys: see wildcard field
body.default_price_data.metadata.*stringAdditional keys
body.default_price_data.recurringobjectOptional
body.default_price_data.recurring.intervalstringRequired within parentOne of: day, month, week, year
body.default_price_data.recurring.interval_countintegerOptional
body.default_price_data.tax_behaviorstringOptionalOne of: exclusive, inclusive, unspecified
body.default_price_data.unit_amountintegerOptional
body.default_price_data.unit_amount_decimalstringOptionalFormat: decimal
body.descriptionstringOptionalThe product’s description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes.
Maximum length: 40000
body.expandarrayOptionalSpecifies which fields in the response should be expanded.
body.expand[]stringEach itemMaximum length: 5000
body.idstringOptionalAn identifier will be randomly generated by Stripe. You can optionally override this ID, but the ID must be unique across all products in your Stripe account.
Maximum length: 5000
body.imagesarrayOptionalA list of up to 8 URLs of images for this product, meant to be displayable to the customer.
body.images[]stringEach item
body.marketing_featuresarrayOptionalA list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://docs.stripe.com/payments/checkout/pricing-table).
body.marketing_features[]objectEach item
body.marketing_features[].namestringRequired within parentMaximum length: 5000
body.metadataobjectOptionalSet of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
Additional keys: see wildcard field
body.metadata.*stringAdditional keys
body.namestringRequired within parentThe product’s name, meant to be displayable to the customer.
Maximum length: 5000
body.package_dimensionsobjectOptionalThe dimensions of this product for shipping purposes.
body.package_dimensions.heightnumberRequired within parent
body.package_dimensions.lengthnumberRequired within parent
body.package_dimensions.weightnumberRequired within parent
body.package_dimensions.widthnumberRequired within parent
body.shippablebooleanOptionalWhether this product is shipped (i.e., physical goods).
body.statement_descriptorstringOptionalAn arbitrary string to be displayed on your customer’s credit card or bank statement. While most banks display this information consistently, some may display it incorrectly or not at all.

This may be up to 22 characters. The statement description may not include `<`, `>`, `&#96;, `”`, `’` characters, and will appear on your customer’s statement in capital letters. Non-ASCII characters are automatically stripped.
It must contain at least one letter. Only used for subscription payments.
Maximum length: 22
body.tax_codestringOptionalA [tax code](https://docs.stripe.com/tax/tax-categories) ID.
body.tax_detailsobjectOptionalTax details for this product, including the [tax code](/tax/tax-codes) and an optional performance location.
body.tax_details.performance_locationstringOptionalMaximum length: 5000
body.tax_details.tax_codeJSONOptional
body.tax_details.tax_code (anyOf 1)stringAlternative
body.tax_details.tax_code (anyOf 2)stringAlternativeOne of:
body.unit_labelstringOptionalA label that represents units of this product. When set, this will be included in customers’ receipts, invoices, Checkout, and the customer portal.
Maximum length: 12
body.urlstringOptionalA URL of a publicly-accessible webpage for this product.
Maximum length: 5000

Referenced models: Create a price — request body — body currency options value

Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$ModelRootExpand Create a product — response body

Referenced models: Create a product — response body

9 more schemas are linked from the tables above, on the schema pages.

Create a product — response body
FieldTypePresenceDescription and constraints
$objectRootProducts describe the specific goods or services you offer to your customers.
For example, you might offer a Standard and Premium version of your goods or service; each version would be a separate Product.
They can be used in conjunction with [Prices](https://docs.stripe.com/api#prices) to configure pricing in Payment Links, Checkout, and Subscriptions.

Related guides: [Set up a subscription](https://docs.stripe.com/billing/subscriptions/set-up-subscription),
[share a Payment Link](https://docs.stripe.com/payment-links),
[accept payments with Checkout](https://docs.stripe.com/payments/accept-a-payment#create-product-prices-upfront),
and more about [Products and Prices](https://docs.stripe.com/products-prices/overview)
activebooleanRequired within parentWhether the product is currently available for purchase.
createdJSONRequired within parent
created (anyOf 1)integerAlternativeTime at which the object was created. Measured in seconds since the Unix epoch.
Format: unix-time
created (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
default_priceJSONOptional
default_price (anyOf 1)JSONAlternativeThe ID of the [Price](https://docs.stripe.com/api/prices) object that is the default price for this product.
default_price (anyOf 1) (anyOf 1)stringAlternativeMaximum length: 5000
default_price (anyOf 1) (anyOf 2)ModelAlternativeExpand Create a price — response body
default_price (anyOf 2)nullAlternative
descriptionJSONOptional
description (anyOf 1)stringAlternativeThe product's description, meant to be displayable to the customer. Use this field to optionally store a long form explanation of the product being sold for your own rendering purposes.
Maximum length: 5000
description (anyOf 2)nullAlternative
idstringRequired within parentUnique identifier for the object.
Maximum length: 5000
imagesarrayRequired within parentA list of up to 8 URLs of images for this product, meant to be displayable to the customer.
images[]stringEach itemMaximum length: 5000
livemodebooleanRequired within parentIf the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
marketing_featuresarrayRequired within parentA list of up to 15 marketing features for this product. These are displayed in [pricing tables](https://docs.stripe.com/payments/checkout/pricing-table).
marketing_features[]ModelEach itemExpand Create a product — response body — marketing features item
metadataobjectRequired within parentSet of [key-value pairs](https://docs.stripe.com/api/metadata) 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.*stringAdditional keysMaximum length: 500
namestringRequired within parentThe product's name, meant to be displayable to the customer.
Maximum length: 5000
objectstringRequired within parentString representing the object's type. Objects of the same type share the same value.
Known values: product
package_dimensionsJSONOptional
package_dimensions (anyOf 1)JSONAlternativeThe dimensions of this product for shipping purposes.
package_dimensions (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a product — response body — package dimensions value height, length, weight, width
package_dimensions (anyOf 2)nullAlternative
shippableJSONOptional
shippable (anyOf 1)booleanAlternativeWhether this product is shipped (i.e., physical goods).
shippable (anyOf 2)nullAlternative
statement_descriptorJSONOptional
statement_descriptor (anyOf 1)stringAlternativeExtra information about a product which will appear on your customer's credit card statement. In the case that multiple products are billed at once, the first statement descriptor will be used. Only used for subscription payments.
Maximum length: 5000
statement_descriptor (anyOf 2)nullAlternative
tax_codeJSONOptional
tax_code (anyOf 1)JSONAlternativeA [tax code](https://docs.stripe.com/tax/tax-categories) ID.
tax_code (anyOf 1) (anyOf 1)stringAlternativeMaximum length: 5000
tax_code (anyOf 1) (anyOf 2)ModelAlternativeExpand Retrieve a tax code — response body
tax_code (anyOf 2)nullAlternative
tax_detailsJSONOptional
tax_details (anyOf 1)JSONAlternativeTax details for this product, including the [tax code](/tax/tax-codes) and an optional performance location.
tax_details (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a product — response body — tax details value performance location, tax code
tax_details (anyOf 2)nullAlternative
unit_labelJSONOptional
unit_label (anyOf 1)stringAlternativeA label that represents units of this product. When set, this will be included in customers' receipts, invoices, Checkout, and the customer portal.
Maximum length: 5000
unit_label (anyOf 2)nullAlternative
updatedJSONRequired within parent
updated (anyOf 1)integerAlternativeTime at which the object was last updated. Measured in seconds since the Unix epoch.
Format: unix-time
updated (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
urlJSONOptional
url (anyOf 1)stringAlternativeA URL of a publicly-accessible webpage for this product.
Maximum length: 2048
url (anyOf 2)nullAlternative

Referenced models: Create a product — response body — package dimensions value height, length, weight, width, Create a price — response body, Create a product — response body — marketing features item, Retrieve a tax code — response body, Create a product — response body — tax details value performance location, tax code

Create a price — request body — body currency options value
FieldTypePresenceDescription and constraints
$objectRoot
custom_unit_amountobjectOptional
custom_unit_amount.enabledbooleanRequired within parent
custom_unit_amount.maximumintegerOptional
custom_unit_amount.minimumintegerOptional
custom_unit_amount.presetintegerOptional
tax_behaviorstringOptionalOne of: exclusive, inclusive, unspecified
tiersarrayOptional
tiers[]objectEach item
tiers[].flat_amountintegerOptional
tiers[].flat_amount_decimalstringOptionalFormat: decimal
tiers[].unit_amountintegerOptional
tiers[].unit_amount_decimalstringOptionalFormat: decimal
tiers[].up_toJSONRequired within parent
tiers[].up_to (anyOf 1)stringAlternativeOne of: inf
Maximum length: 5000
tiers[].up_to (anyOf 2)integerAlternative
unit_amountintegerOptional
unit_amount_decimalstringOptionalFormat: decimal
Create a product — response body — package dimensions value height, length, weight, width
FieldTypePresenceDescription and constraints
$objectRoot
heightJSONRequired within parent
height (anyOf 1)numberAlternativeHeight, in inches.
height (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
lengthJSONRequired within parent
length (anyOf 1)numberAlternativeLength, in inches.
length (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
weightJSONRequired within parent
weight (anyOf 1)numberAlternativeWeight, in ounces.
weight (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
widthJSONRequired within parent
width (anyOf 1)numberAlternativeWidth, in inches.
width (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
Create a product — response body — marketing features item
FieldTypePresenceDescription and constraints
$objectRoot
namestringOptionalThe marketing feature name. Up to 80 characters long.
Maximum length: 5000
Create a product — response body — tax details value performance location, tax code
FieldTypePresenceDescription and constraints
$objectRootTax details contains information about the data that was used to calculate taxes.
performance_locationJSONOptional
performance_location (anyOf 1)stringAlternativeThe ID of a tax location with type `performance`, representing where the performance takes place.
Maximum length: 5000
performance_location (anyOf 2)nullAlternative
tax_codeJSONOptional
tax_code (anyOf 1)stringAlternativeA [tax code](https://docs.stripe.com/tax/tax-categories) ID.
Maximum length: 5000
tax_code (anyOf 2)nullAlternative

SDK function policy ID: stripe.postproducts. Catalog operation: PostProducts. 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"}

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.