Tax, shipping, and inventory Deprecated Use the Orders API to sell and organize your products through Stripe. The Orders API is deprecated. Additionally, as of September 2019, a regulation called Strong Customer Authentication (SCA) requires businesses in Europe to request additional authentication for online payments. The Orders API is not SCA-ready.

When to use orders Orders integrate nicely with other parts of the Stripe API that you might already be familiar with. For example, paying an order creates a Charge object. Similarly, returning an order will create a refund for all or part of that charge. Orders support additional features beyond basic charges that you might find helpful: Calculate taxes due on orders via Avalara, TaxJar, or Taxamo

Retrieve shipping rates from USPS, FedEx, and more using EasyPost or Shippo

Keep track of fulfilled orders and seamlessly handle returns

Import products from a Google or LinkShare product feed Use the Orders API if any of the following apply to you: You need to calculate taxes or shipping for the products you are selling

You sell physical goods than can be shipped and returned by customers On the other hand, there are some cases where other Stripe products would be easier to use: If you want to charge customers on a recurring basis, subscriptions let you do that easily

If you are selling a variable-rate service (like a Lyft ride), charges give you more flexibility

If you already have an inventory, tax, and shipping system, you may not need the extra features that Stripe orders provide

Define products and SKUs You can start out by creating your products and SKUs in the Dashboard. There are two kinds of products: goods and services. Goods can be physical things you ship or digital things that your customers download. A service is an amenity that is provided on an ongoing basis for a recurring fee. Goods are intended for use with the Orders API while services are for subscriptions. See the best practices for examples and additional tips. You can easily create products and SKUs programmatically: curl Ruby Python PHP Java Node Go .NET curl https://api.stripe.com/v1/products \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d name="Limited Edition T-Shirt" \ -d type=good \ -d "attributes[]"=size \ -d "attributes[]"=gender \ -d "attributes[]"=color \ -d description="Super awesome, one-of-a-kind t-shirt" curl https://api.stripe.com/v1/products \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d name="Limited Edition T-Shirt" \ -d type=good \ -d "attributes[]"=size \ -d "attributes[]"=gender \ -d "attributes[]"=color \ -d description="Super awesome, one-of-a-kind t-shirt" # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' product = Stripe::Product.create({ name: 'Limited Edition T-Shirt', type: 'good', attributes: ['size', 'gender', 'color'], description: 'Super awesome, one-of-a-kind t-shirt', }) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' product = Stripe::Product.create({ name: 'Limited Edition T-Shirt', type: 'good', attributes: ['size', 'gender', 'color'], description: 'Super awesome, one-of-a-kind t-shirt', }) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' product = stripe.Product.create( name='Limited Edition T-Shirt', type='good', attributes=['size', 'gender', 'color'], description='Super awesome, one-of-a-kind t-shirt', ) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' product = stripe.Product.create( name='Limited Edition T-Shirt', type='good', attributes=['size', 'gender', 'color'], description='Super awesome, one-of-a-kind t-shirt', ) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $product = \Stripe\Product::create([ 'name' => 'Limited Edition T-Shirt', 'type' => 'good', 'attributes' => ['size', 'gender', 'color'], 'description' => 'Super awesome, one-of-a-kind t-shirt', ]); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $product = \Stripe\Product::create([ 'name' => 'Limited Edition T-Shirt', 'type' => 'good', 'attributes' => ['size', 'gender', 'color'], 'description' => 'Super awesome, one-of-a-kind t-shirt', ]); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; ProductCreateParams params = ProductCreateParams.builder() .setName("Limited Edition T-Shrt") .setType(ProductCreateParams.Type.GOOD) .addAttribute("size") .addAttribute("gender") .addAttribute("color") .setDescription("Super awesome, one-of-a-kind t-shirt") .build(); Product product = Product.create(params); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; ProductCreateParams params = ProductCreateParams.builder() .setName("Limited Edition T-Shrt") .setType(ProductCreateParams.Type.GOOD) .addAttribute("size") .addAttribute("gender") .addAttribute("color") .setDescription("Super awesome, one-of-a-kind t-shirt") .build(); Product product = Product.create(params); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const product = stripe.products.create({ name: 'Limited Edition T-Shirt', type: 'good', attributes: ['size', 'gender', 'color'], description: 'Super awesome, one-of-a-kind t-shirt', }); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const product = stripe.products.create({ name: 'Limited Edition T-Shirt', type: 'good', attributes: ['size', 'gender', 'color'], description: 'Super awesome, one-of-a-kind t-shirt', }); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.ProductParams{ Name: stripe.String("Limited Edition T-Shirt"), Type: stripe.String(string(stripe.ProductTypeGood)), Attributes: stripe.StringSlice([]string{ "size", "gender", "color", }), Description: stripe.String("Super awesome, one-of-a-kind t-shirt"), } prod, _ := product.New(params) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.ProductParams{ Name: stripe.String("Limited Edition T-Shirt"), Type: stripe.String(string(stripe.ProductTypeGood)), Attributes: stripe.StringSlice([]string{ "size", "gender", "color", }), Description: stripe.String("Super awesome, one-of-a-kind t-shirt"), } prod, _ := product.New(params) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new ProductCreateOptions { Name = "Limited Edition T-Shirt", Type = "good", Attributes = new string[] {"size", "gender", "color"}, Description = "Super awesome, one-of-a-kind t-shirt", }; var service = new ProductService(); Product product = service.Create(options); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new ProductCreateOptions { Name = "Limited Edition T-Shirt", Type = "good", Attributes = new string[] {"size", "gender", "color"}, Description = "Super awesome, one-of-a-kind t-shirt", }; var service = new ProductService(); Product product = service.Create(options); Products can have associated images, descriptions, and more. The attributes property is how a product defines the features that can be set on individual SKUs: the specific versions of the product a customer actually buys. For example, the above code says that the Limited Edition T-shirt product comes in different variations for size, gender, and color. With a product defined, create specific product variations as SKUs, taking into account all possible combinations of attributes. curl Ruby Python PHP Java Node Go .NET curl https://api.stripe.com/v1/skus \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d currency=usd \ -d "inventory[type]"=finite \ -d "inventory[quantity]"=500 \ -d price=1500 \ -d product=prod_I4NyYakPJVxOss \ -d "attributes[size]"=Medium \ -d "attributes[gender]"=Unisex \ -d "attributes[color]"=Cyan curl https://api.stripe.com/v1/skus \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d currency=usd \ -d "inventory[type]"=finite \ -d "inventory[quantity]"=400 \ -d price=1500 \ -d product=prod_I4NyYakPJVxOss \ -d "attributes[size]"=Large \ -d "attributes[gender]"=Unisex \ -d "attributes[color]"=Cyan curl https://api.stripe.com/v1/skus \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d currency=usd \ -d "inventory[type]"=finite \ -d "inventory[quantity]"=500 \ -d price=1500 \ -d product=prod_I4NyYakPJVxOss \ -d "attributes[size]"=Medium \ -d "attributes[gender]"=Unisex \ -d "attributes[color]"=Cyan curl https://api.stripe.com/v1/skus \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d currency=usd \ -d "inventory[type]"=finite \ -d "inventory[quantity]"=400 \ -d price=1500 \ -d product=prod_I4NyYakPJVxOss \ -d "attributes[size]"=Large \ -d "attributes[gender]"=Unisex \ -d "attributes[color]"=Cyan # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sku1 = Stripe::SKU.create({ currency: 'usd', inventory: { 'type' => 'finite', 'quantity' => 500, }, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: { 'size' => 'Medium', 'gender' => 'Unisex', 'color' => 'Cyan', }, }) sku2 = Stripe::SKU.create({ currency: 'usd', inventory: { 'type' => 'finite', 'quantity' => 400, }, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: { 'size' => 'Large', 'gender' => 'Unisex', 'color' => 'Cyan', }, }) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sku1 = Stripe::SKU.create({ currency: 'usd', inventory: { 'type' => 'finite', 'quantity' => 500, }, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: { 'size' => 'Medium', 'gender' => 'Unisex', 'color' => 'Cyan', }, }) sku2 = Stripe::SKU.create({ currency: 'usd', inventory: { 'type' => 'finite', 'quantity' => 400, }, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: { 'size' => 'Large', 'gender' => 'Unisex', 'color' => 'Cyan', }, }) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sku1 = stripe.SKU.create( currency='usd', inventory={ 'type': 'finite', 'quantity': 500, }, price=1500, product='prod_I4NyYakPJVxOss', attributes={ 'size': 'Medium', 'gender': 'Unisex', 'color': 'Cyan', }, ) sku2 = stripe.SKU.create( currency='usd', inventory={ 'type': 'finite', 'quantity': 400, }, price=1500, product='prod_I4NyYakPJVxOss', attributes={ 'size': 'Large', 'gender': 'Unisex', 'color': 'Cyan', }, ) # Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sku1 = stripe.SKU.create( currency='usd', inventory={ 'type': 'finite', 'quantity': 500, }, price=1500, product='prod_I4NyYakPJVxOss', attributes={ 'size': 'Medium', 'gender': 'Unisex', 'color': 'Cyan', }, ) sku2 = stripe.SKU.create( currency='usd', inventory={ 'type': 'finite', 'quantity': 400, }, price=1500, product='prod_I4NyYakPJVxOss', attributes={ 'size': 'Large', 'gender': 'Unisex', 'color': 'Cyan', }, ) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $sku1 = \Stripe\SKU::create([ 'currency' => 'usd', 'inventory' => [ 'type' => 'finite', 'quantity' => 500, ], 'price' => 1500, 'product' => 'prod_I4NyYakPJVxOss', 'attributes' => [ 'size' => 'Medium', 'gender' => 'Unisex', 'color' => 'Cyan', ], ]); $sku2 = \Stripe\SKU::create([ 'currency' => 'usd', 'inventory' => [ 'type' => 'finite', 'quantity' => 400, ], 'price' => 1500, 'product' => 'prod_I4NyYakPJVxOss', 'attributes' => [ 'size' => 'Large', 'gender' => 'Unisex', 'color' => 'Cyan', ], ]); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $sku1 = \Stripe\SKU::create([ 'currency' => 'usd', 'inventory' => [ 'type' => 'finite', 'quantity' => 500, ], 'price' => 1500, 'product' => 'prod_I4NyYakPJVxOss', 'attributes' => [ 'size' => 'Medium', 'gender' => 'Unisex', 'color' => 'Cyan', ], ]); $sku2 = \Stripe\SKU::create([ 'currency' => 'usd', 'inventory' => [ 'type' => 'finite', 'quantity' => 400, ], 'price' => 1500, 'product' => 'prod_I4NyYakPJVxOss', 'attributes' => [ 'size' => 'Large', 'gender' => 'Unisex', 'color' => 'Cyan', ], ]); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; SkuCreateParams params1 = SkuCreateParams.builder() .setCurrency("usd") .setInventory( SkuCreateParams.Inventory.builder() .setType(SkuCreateParams.Inventory.Type.FINITE) .setQuantity(500L) .build()) .setPrice(1500L) .setProduct("prod_I4NyYakPJVxOss") .putAttribute("size", "Medium") .putAttribute("gender", "Unisex") .putAttribute("color", "Cyan") .build(); Sku sku1 = Sku.create(params1); SkuCreateParams params2 = SkuCreateParams.builder() .setCurrency("usd") .setInventory( SkuCreateParams.Inventory.builder() .setType(SkuCreateParams.Inventory.Type.FINITE) .setQuantity(400L) .build()) .setPrice(2500L) .setProduct("prod_I4NyYakPJVxOss") .putAttribute("size", "Large") .putAttribute("gender", "Unisex") .putAttribute("color", "Cyan") .build(); Sku sku2 = Sku.create(params2); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; SkuCreateParams params1 = SkuCreateParams.builder() .setCurrency("usd") .setInventory( SkuCreateParams.Inventory.builder() .setType(SkuCreateParams.Inventory.Type.FINITE) .setQuantity(500L) .build()) .setPrice(1500L) .setProduct("prod_I4NyYakPJVxOss") .putAttribute("size", "Medium") .putAttribute("gender", "Unisex") .putAttribute("color", "Cyan") .build(); Sku sku1 = Sku.create(params1); SkuCreateParams params2 = SkuCreateParams.builder() .setCurrency("usd") .setInventory( SkuCreateParams.Inventory.builder() .setType(SkuCreateParams.Inventory.Type.FINITE) .setQuantity(400L) .build()) .setPrice(2500L) .setProduct("prod_I4NyYakPJVxOss") .putAttribute("size", "Large") .putAttribute("gender", "Unisex") .putAttribute("color", "Cyan") .build(); Sku sku2 = Sku.create(params2); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const sku1 = await stripe.skus.create({ currency: 'usd', inventory: {'type': 'finite', 'quantity': 500}, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: {'size': 'Medium', 'gender': 'Unisex', 'color': 'Cyan'}, }); const sku2 = await stripe.skus.create({ currency: 'usd', inventory: {'type': 'finite', 'quantity': 400}, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: {'size': 'Large', 'gender': 'Unisex', 'color': 'Cyan'}, }); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const sku1 = await stripe.skus.create({ currency: 'usd', inventory: {'type': 'finite', 'quantity': 500}, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: {'size': 'Medium', 'gender': 'Unisex', 'color': 'Cyan'}, }); const sku2 = await stripe.skus.create({ currency: 'usd', inventory: {'type': 'finite', 'quantity': 400}, price: 1500, product: 'prod_I4NyYakPJVxOss', attributes: {'size': 'Large', 'gender': 'Unisex', 'color': 'Cyan'}, }); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params1 := &stripe.SKUParams{ Currency: stripe.String(string(stripe.CurrencyUSD)), Inventory: &stripe.InventoryParams{ Type: stripe.String(string(stripe.SKUInventoryTypeFinite)), Quantity: stripe.Int64(500), }, Price: stripe.Int64(1500), Product: stripe.String("prod_I4NyYakPJVxOss"), Attributes: map[string]string{ "size": "Medium", "gender": "Unisex", "color": "Cyan", }, } sku1, _ := sku.New(params1) params2 := &stripe.SKUParams{ Currency: stripe.String(string(stripe.CurrencyUSD)), Inventory: &stripe.InventoryParams{ Type: stripe.String(string(stripe.SKUInventoryTypeFinite)), Quantity: stripe.Int64(400), }, Price: stripe.Int64(1500), Product: stripe.String("prod_I4NyYakPJVxOss"), Attributes: map[string]string{ "size": "Large", "gender": "Unisex", "color": "Cyan", }, } sku2, _ := sku.New(params2) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params1 := &stripe.SKUParams{ Currency: stripe.String(string(stripe.CurrencyUSD)), Inventory: &stripe.InventoryParams{ Type: stripe.String(string(stripe.SKUInventoryTypeFinite)), Quantity: stripe.Int64(500), }, Price: stripe.Int64(1500), Product: stripe.String("prod_I4NyYakPJVxOss"), Attributes: map[string]string{ "size": "Medium", "gender": "Unisex", "color": "Cyan", }, } sku1, _ := sku.New(params1) params2 := &stripe.SKUParams{ Currency: stripe.String(string(stripe.CurrencyUSD)), Inventory: &stripe.InventoryParams{ Type: stripe.String(string(stripe.SKUInventoryTypeFinite)), Quantity: stripe.Int64(400), }, Price: stripe.Int64(1500), Product: stripe.String("prod_I4NyYakPJVxOss"), Attributes: map[string]string{ "size": "Large", "gender": "Unisex", "color": "Cyan", }, } sku2, _ := sku.New(params2) // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var service = new SkuService(); var skuOptions1 = new SkuCreateOptions { Currency = "usd", Inventory = new SkuInventoryOptions { Type = "finite", Quantity = 500, }, Price = 1500, Product = "prod_I4NyYakPJVxOss", Attributes = new Dictionary<string, string> { {"size", "Medium"}, {"gender", "Unisex"}, {"color", "Cyan"}, }, }; Sku sku1 = service.Create(skuOptions1); var skuOptions2 = new SkuCreateOptions { Currency = "usd", Inventory = new SkuInventoryOptions { Type = "finite", Quantity = 400, }, Price = 1500, Product = "prod_I4NyYakPJVxOss", Attributes = new Dictionary<string, string> { {"size", "Large"}, {"gender", "Unisex"}, {"color", "Cyan"}, }, }; Sku sku2 = service.Create(skuOptions2); // Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var service = new SkuService(); var skuOptions1 = new SkuCreateOptions { Currency = "usd", Inventory = new SkuInventoryOptions { Type = "finite", Quantity = 500, }, Price = 1500, Product = "prod_I4NyYakPJVxOss", Attributes = new Dictionary<string, string> { {"size", "Medium"}, {"gender", "Unisex"}, {"color", "Cyan"}, }, }; Sku sku1 = service.Create(skuOptions1); var skuOptions2 = new SkuCreateOptions { Currency = "usd", Inventory = new SkuInventoryOptions { Type = "finite", Quantity = 400, }, Price = 1500, Product = "prod_I4NyYakPJVxOss", Attributes = new Dictionary<string, string> { {"size", "Large"}, {"gender", "Unisex"}, {"color", "Cyan"}, }, }; Sku sku2 = service.Create(skuOptions2); The above code creates two different SKUs—variants on a product, differentiated by size and price. You normally have exponentially more SKUs than products. If the Limited Edition T-shirt came in three sizes—small, medium, and large—and in two colors—cyan and magenta, there would be at least six SKUs representing it.

Configure shipping and tax handling Real-world orders involve not only the cost of the items being purchased, but also shipping costs and taxes. Stripe can automatically and dynamically add these costs to your orders. Configure your shipping and tax preferences in the Dashboard. The Shipping and Taxes settings each offer four approaches. Shipping can be set as: provider : A third-party provider like EasyPost or Shippo which will provide the shipping rates dynamically

: A third-party provider like EasyPost or Shippo which will provide the shipping rates dynamically flat_rate : One or more fixed-cost options like Standard , Express , and Overnight shipping. You can even opt to waive the shipping cost above a certain order total.

: One or more fixed-cost options like , , and shipping. You can even opt to waive the shipping cost above a certain order total. free : No additional cost, the default

: No additional cost, the default callback : See below Taxes can be set as: provider : A third-party provider like Avalara, TaxJar, or Taxamo which will provide the tax amount dynamically

: A third-party provider like Avalara, TaxJar, or Taxamo which will provide the tax amount dynamically percentage : A flat additional cost, as a percent of the order total, before shipping

: A flat additional cost, as a percent of the order total, before shipping included : No additional cost, the default

: No additional cost, the default callback : See below Shipping and Taxes each offer a callback option. If you wish to calculate shipping and taxes yourself, provide an endpoint on your own server that Stripe will hit, in real time, to retrieve these costs. This can be helpful if you want to use the Orders API but have an existing system for shipping and taxes, or if you want to sell through an application or mobile app.