# Shipping & tax

> Where the store ships and what it charges — one flat fee or shipping zones, rate types, shipping profiles, live carrier rates from UPS, FedEx, DHL Express, USPS, ShipStation, Shiprocket and NimbusPost, and tax.

Source: https://knowledge.estage.com/store/shipping/
Part of the ESTAGE knowledge base (https://knowledge.estage.com). Full corpus: https://knowledge.estage.com/llms-full.txt

---
Delivery and tax are set in **ESTAGE CRM → Settings → Store**, on the **Shipping** and **Tax**
tabs. Carrier accounts are connected in **Genesis → Settings → Shipping Carriers**.

## One flat fee, or zones

**One flat fee** is the simplest shipping a shop can have: one price for every order that has
something to ship, anywhere. Turn it on and zones are not used at all.

Otherwise, shipping is **zones**. A zone is a list of **Destinations** (countries, or regions
within a country) with the **rates** it offers.

:::caution[Zone order matters]
A buyer's address uses the **first** zone that covers it, from the top. A broad zone above a
narrow one swallows it — put *California* above *United States*. Drag zones to reorder them.
:::

## Rates

Each rate in a zone has a **Method** and a **Rate type**.

**Method** — how the parcel gets there:

- **Shipping** — a carrier takes it to the address.
- **Local delivery** — you deliver it yourself, optionally only to the **Postal codes you
  deliver to**.
- **Pickup** — the buyer collects it; your **Pickup instructions** are shown at checkout.

**Rate type** — how it is priced:

| Rate type | Charges |
| --- | --- |
| **Flat fee** | The price, always. |
| **Free over a threshold** | Free once the goods reach an amount, otherwise the price. |
| **By cart weight** | The price, when the cart weighs between a minimum and a maximum. Add several for weight bands. |
| **Carrier calculated** | What the connected carrier quotes for that parcel, service by service. See below. |

A rate can also carry a **Transit time** — the delivery estimate the buyer sees next to it.

## Shipping profiles

Most shops need one set of zones. When some products ship differently — heavy furniture, cold
goods — put them in their own **shipping profile** with its own zones and rates, and pick the
profile on those products. A cart with products from several profiles still gets one delivery
choice: rates with the **same name** in each profile are added together.

## Live carrier rates

With a carrier connected, a **Carrier calculated** rate asks it for the price of each cart at
checkout. The buyer sees one option per service the carrier offers — *UPS Ground*,
*UPS 2nd Day Air*… — with the carrier's price and transit time. The order remembers the service
the buyer paid for, and the label you buy later uses it.

| Carrier | Live rates at checkout | Labels & tracking |
| --- | --- | --- |
| **UPS** | Yes | Yes |
| **FedEx** | Yes | Yes |
| **DHL Express** | Yes | Yes |
| **USPS** | Yes | Labels need USPS approval (CRID, MID and a payment account) |
| **DPD UK** | No — prices are yours | Yes |
| **GLS** | No — prices are yours | Yes |
| **ShipStation** | Yes — every carrier on your ShipStation account | Yes, worldwide, customs built from the order ([see below](#shipstation)) |
| **Shiprocket** | Yes — India only, INR | Yes, paid from your Shiprocket wallet ([see below](#shiprocket-and-nimbuspost-india)) |
| **NimbusPost** | Yes — India only, INR | Yes, paid from your NimbusPost wallet ([see below](#shiprocket-and-nimbuspost-india)) |

### Connecting a carrier

1. In **Genesis → Settings → Shipping Carriers**, click **Connect** on the carrier.
2. Enter the keys from your own account with that carrier — nothing else. The keys are checked
   with the carrier and stored encrypted; they are never shown again.
3. Test keys connect to the carrier's **sandbox**, live keys to production — this is detected
   from the keys. A carrier in sandbox is marked **Sandbox** on its row.

UPS, FedEx, DHL Express, USPS, DPD UK and GLS ship from the address in
[Business Details](/project-settings/business-details/). Without one, the carrier quotes nothing and
labels cannot be bought. Shiprocket and NimbusPost ship from the **pickup location** you choose in
their settings, and ShipStation from a ShipStation warehouse (or Business Details).

## Shiprocket and NimbusPost (India)

Both are Indian shipping aggregators: one account gives you many couriers, paid from a prepaid
wallet you keep topped up.

1. **Connect** in **Genesis → Settings → Shipping Carriers**.
   - **NimbusPost** — an **API key** (starts with `npk_`) and its **API secret**. Create them in
     NimbusPost **Settings → API Keys** with the **admin** role (a viewer key cannot book shipments)
     and leave the IP allowlist empty.
   - **Shiprocket** — the email and password of an **API user**, not your own Shiprocket login.
     Create one in Shiprocket **Settings → API → Configure** and tick **every** module under
     *Modules to Access* — without the settings module, adding a pickup address fails.
2. Click **Settings** on the carrier and choose a **Pickup location** — or add one there. NimbusPost
   sends a code by SMS to the contact phone to confirm a new address; it expires within minutes.
3. Under **Couriers**, tick the ones buyers may choose at checkout. Leave them all unticked and buyers
   get two options picked for them: **Cheapest delivery** and **Fastest delivery**.
4. **Test quote** — try a 6-digit pincode, a weight and a value to see what checkout will show.
5. Copy the **tracking webhook** from the panel into the carrier (Shiprocket: **Settings → API →
   Webhooks**, with the token shown in its Token field), so tracking arrives as it happens. Without it,
   tracking is still checked every 30 minutes.
6. In **CRM → Settings → Store → Shipping**, add a **Carrier calculated** rate with the carrier chosen.
   Whatever price you give the rate itself is added on top as a handling fee.

When an order is paid, open it in the CRM and **buy the label** — the cost comes from your wallet, and
the PDF label is on the shipment. A label you no longer need can be **voided**; the charge goes back to
the wallet. The buyer gets an email when the parcel ships and when it is delivered.

:::caution[Limits]
Domestic India only — Indian pincodes, and a store priced in **INR**. Prepaid orders only (no cash on
delivery), PDF labels only. A parcel with no dimensions is billed as 30 × 20 × 15 cm, so a light item
can be charged at its volumetric weight (about 1.8 kg) — set real dimensions and weights on products.
:::

## ShipStation

ShipStation connects in **two halves** under one row — use either or both.

**Rates & labels** — paste your **API key (v2)** from ShipStation **Settings → Account → API Settings**.

- Checkout shows live rates from **every carrier on your ShipStation account**, plus **Cheapest** and
  **Fastest** picks.
- Buy the label from the order in the CRM; it is charged to your ShipStation and carrier accounts.
  Labels come as PDF or ZPL.
- Ships **worldwide**: an international parcel gets its customs declaration built from the order lines.
- A key starting with `TEST_` is a sandbox key — free labels, no real tracking.

**Orders sync** — paste a **v1 API key and API secret** from the same page.

- Every paid order with something to ship goes to the ShipStation store you choose under
  **Where orders go**, as **Awaiting Shipment**. Digital-only orders are skipped.
- When you print the label in ShipStation, the carrier and tracking number come back to the order and
  the buyer gets the shipping email.
- **Cancel the order in ShipStation when it is cancelled here** keeps the two in step.
- **Orders sent** lists what went over; **Send again** retries one, and **Send open orders from the last
  N days** (up to 90) catches up orders from before you connected.

:::note
An order you mark as shipped in ShipStation **without** printing a label there sends nothing back, and
in-transit and delivered updates do not come back through the orders sync.
:::

:::note
Carriers quote in their own currency. A quote in a currency other than your store's is not
offered. If a carrier does not answer, its options are simply left out and your other rates
remain.
:::

## Tax

The **Tax** tab chooses **How tax is calculated**:

- **Manual** — your own **Tax regions**: a name and a percent per zone. The first matching rate
  applies.
- **Stripe Tax** — Stripe works out the tax on your own Stripe keys; the filing is yours. Your
  manual rates stay as the **fallback** for when Stripe cannot answer.

Tax is charged on the goods after discounts plus shipping. If your prices already include tax,
turn on **All prices include tax** on the same tab — tax is then shown on the order for
information instead of added.

## What's next

- [Orders, shipping & discounts](/store/orders/) — shipping an order and buying its label.
- [Business Details](/project-settings/business-details/) — the address parcels ship from.
