# Products and prices Use the Invoicing API to manage products and prices. Define all your business and product offerings in one place. *Products* define what you sell and *Prices* track how much and how often to charge. This is a core entity within Stripe that works with *subscriptions*, *invoices*, and [Checkout](https://docs.stripe.com/payments/checkout.md). Prices enable these use cases: - A software provider that charges a one-time setup fee whenever a user creates a new subscription. - An e-commerce store that sends a recurring box of goods for 10 USD per month and wants to allow customers to purchase one-time add-ons. - A professional services firm that can now create a standard list of services and choose from that list per invoice instead of typing out each line item by hand. - A non-profit organization that allows donors to define a custom recurring donation amount per customer. You can manage your product catalog with products and prices. Products define what you sell and prices track how much and how often to charge. Manage your products and their prices in the Dashboard or through the API. If you used the Dashboard in a *sandbox* to set up your business, you can copy each of your products over to live mode by using **Copy to live mode** in the [Product catalog page](https://dashboard.stripe.com/products). Use our official libraries to access the Stripe API from your application. 1. Navigate to the **Product catalog** page, and click **Add product**. 1. Select whether you want to create a **One-time product**, or a **Recurring one-time product**. 1. Give your product a name, and assign it a price. Learn how to create [Products](https://docs.stripe.com/api/products.md) and [Prices](https://docs.stripe.com/api/prices.md). For a complete guide on how to get started using the [Stripe CLI](https://docs.stripe.com/stripe-cli.md) or API, see the [Invoicing end-to-end integration guide](https://docs.stripe.com/invoicing/integration.md). ### Create a product To create a product, enter its name: ```dotnet StripeConfiguration.ApiKey = "<>"; var options = new ProductCreateOptions { Name = "Gold Special" }; var service = new ProductService(); Product product = service.Create(options); ``` ```go stripe.Key = "<>" params := &stripe.ProductParams{Name: stripe.String("Gold Special")}; result, err := product.New(params); ``` ```java Stripe.apiKey = "<>"; ProductCreateParams params = ProductCreateParams.builder().setName("Gold Special").build(); Product product = Product.create(params); ``` ```node const stripe = require('stripe')('<>'); const product = await stripe.products.create({ name: 'Gold Special', }); ``` ```python import stripe stripe.api_key = "<>" product = stripe.Product.create(name="Gold Special") ``` ```php $stripe = new \Stripe\StripeClient('<>'); $product = $stripe->products->create(['name' => 'Gold Special']); ``` ```ruby Stripe.api_key = '<>' product = Stripe::Product.create({name: 'Gold Special'}) ``` ### Create a price [Prices](https://docs.stripe.com/api.md#prices) define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the billing interval (when the price is for a subscription). Like products, if you only have a few prices, it’s preferable to manage them in the Dashboard. Use the unit amount to express prices in the lowest unit of the currency—in this case, cents (10 USD is 1,000 cents, so the unit amount is 1000). As an alternative, if you don’t need to create a price for your product, you can use the [amount](https://docs.stripe.com/api/invoiceitems/create.md#create_invoiceitem-amount) parameter during invoice item creation. To create a price and assign it to the product, pass the product ID, unit amount, and currency. In the following example, the price for the “Gold Special” product is 10 USD: ```dotnet StripeConfiguration.ApiKey = "<>"; var options = new PriceCreateOptions { Product = "<>", UnitAmount = 1000, Currency = "usd", }; var service = new PriceService(); Price price = service.Create(options); ``` ```go stripe.Key = "<>" params := &stripe.PriceParams{ Product: stripe.String("<>"), UnitAmount: stripe.Int64(1000), Currency: stripe.String(string(stripe.CurrencyUSD)), }; result, err := price.New(params); ``` ```java Stripe.apiKey = "<>"; PriceCreateParams params = PriceCreateParams.builder() .setProduct("<>") .setUnitAmount(1000L) .setCurrency("usd") .build(); Price price = Price.create(params); ``` ```node const stripe = require('stripe')('<>'); const price = await stripe.prices.create({ product: '<>', unit_amount: 1000, currency: 'usd', }); ``` ```python import stripe stripe.api_key = "<>" price = stripe.Price.create( product="<>", unit_amount=1000, currency="usd", ) ``` ```php $stripe = new \Stripe\StripeClient('<>'); $price = $stripe->prices->create([ 'product' => '<>', 'unit_amount' => 1000, 'currency' => 'usd', ]); ``` ```ruby Stripe.api_key = '<>' price = Stripe::Price.create({ product: '<>', unit_amount: 1000, currency: 'usd', }) ```