# Pricing > Your wholesale prices, what an order costs (items, extra placements, shipping, tax), and the guarantee that an estimate equals the charge. Source: https://swaglists.com/docs/pricing 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 ```text 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](https://swaglists.com/docs/shipping.md#rates). | | **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). ```bash title="cURL" 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 }] }' ``` ```js title="Node.js" 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])); ``` ```python title="Python" 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"]) ``` ```json title="Response (abridged)" { "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`](https://swaglists.com/docs/events.md#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](https://swaglists.com/docs/billing.md#bonus-tiers) — extra credits that lower your effective cost.