Pricing
Your wholesale prices, what an order costs (items, extra placements, shipping, tax), and the guarantee that an estimate equals the charge.
Every price you see in the API is your wholesale price — what we charge you. You set your own retail prices in your store; the difference is your margin.
What an order costs
total = Σ items (unit price × quantity) + shipping + tax| Part | Where you see it |
|---|---|
| Unit price of a catalog variant (artwork on one placement) | catalog_products[].variants[].price, price_from |
| Unit price of your product variant (with all its designs) | products[].variants[].price |
| Extra placements | Included in the product variant price. Some products include one placement and charge for each additional one; others charge per placement. |
| Shipping | POST /shipping/rates — first item + each additional item, per destination and method. See Shipping. |
| Tax | US sales tax for the shipping address (state, county and city rates, and each product's taxability: clothing is exempt or reduced in some states), calculated automatically in the states where we collect, and paid from your credits with the order. 0 elsewhere. Accounts with an approved resale certificate (Settings → Billing) are tax-exempt and collect tax from their own customers. The tax in an estimate is the tax you're charged when you place that order. |
All amounts are integers in cents (usd).
Estimate = charge
Prices are computed from our price tables, never from a live quote at order time. POST /orders/estimate runs the exact same calculation as POST /orders, so the estimate's total is what the order will charge — as long as nothing changes between the two calls (prices, items, address, shipping method).
curl -X POST https://swaglists.com/api/v1/orders/estimate \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": { "name": "Jane Doe", "address1": "123 Market St", "city": "San Francisco", "state_code": "CA", "postal_code": "94107", "country_code": "US" },
"shipping_method": "standard",
"items": [{ "sku": "CA-TEE-BLK-M", "quantity": 2 }]
}'const res = await fetch("https://swaglists.com/api/v1/orders/estimate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify(orderBody), // the same body you would POST to /orders
});
const estimate = await res.json();
console.log(estimate.total, estimate.sufficient_funds, estimate.available_shipping_methods.map((m) => [m.method, m.price]));estimate = requests.post(
"https://swaglists.com/api/v1/orders/estimate",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json=order_body, # the same body you would POST to /orders
).json()
print(estimate["total"], estimate["sufficient_funds"]){
"object": "order_estimate",
"currency": "usd",
"shipping_method": "standard",
"items": [{ "index": 0, "sku": "CA-TEE-BLK-M", "quantity": 2, "unit_price": 1299, "total_price": 2598 }],
"subtotal": 2598,
"shipping": 700,
"tax": 0,
"total": 3298,
"available_shipping_methods": [{ "method": "standard", "price": 700 }, { "method": "express", "price": 1450 }],
"estimated_delivery_days": { "min": 5, "max": 9 },
"wallet_available": 482550,
"sufficient_funds": true
}Once an order is created, its prices are locked: items keep the unit_price they were created with, even if catalog prices change later.
Price changes
Wholesale prices can change (for example when our material costs change or your account moves to a different price list). When a catalog variant used by one of your products changes price you receive a catalog.price_changed event with the affected catalog_variant_ids. Re-read the prices (GET /products/{id} or GET /catalog/products/{id}) and update your retail prices if needed. Orders already created are not affected.
You don't need webhooks to hear about it: every change to the price of one of your SKUs is also listed, with the old and new price, under Products → Price changes in the dashboard, and your team gets a dashboard notification and an email digest (choose who receives it in Settings → Notifications → Price changes). New prices apply immediately to orders created after the change.
Volume pricing
Prices depend on your account's price list. Large accounts can get custom pricing — contact support@swaglists.com. Separately, larger credit top-ups earn bonus credits — extra credits that lower your effective cost.