Skip to content

13. Shipping

[← Categories]/12-categories/ · [Index]/00-index/

13. Shipping

Verified against: Medusa admin dashboard 2.18.0 (location-create, location-service-zone-create, location-service-zone-shipping-option-create — schemas and forms source-read directly), real seed data in services/medusa/src/migration-scripts/initial-data-seed.ts, and .ai/features/shipping.md, .ai/next-tasks.md.


How shipping is structured in this admin

Configured under Settings → Locations (not a dedicated sidebar section — see [Section 2]/02-admin-dashboard/#shipping), in three nested layers:

Stock Location ("India Warehouse")
Service Zone (which geography this location ships to)
Shipping Option (the actual method + price the customer picks at checkout)

Real setup today

LayerReal value
Stock Location“India Warehouse” — address is a placeholder, not the real warehouse address
Service ZoneSingle zone covering all of India (geo_zones: [{ country_code: "in", type: "country" }]) — flat nationwide, no per-state/per-distance split
Shipping Option“Standard Delivery”, flat rate ₹49 — explicitly a placeholder, not a confirmed real cost
Fulfillment providermanual_manual — Medusa’s default; no live carrier rate/tracking integration is fully wired yet (see Shiprocket note below)

Creating/editing a Stock Location — real fields

FieldRequired?
NameREQUIRED
Address Line 1REQUIRED
Address Line 2OPTIONAL
CityOPTIONAL
Postal CodeREQUIRED
CountryREQUIRED
State/ProvinceOPTIONAL
CompanyOPTIONAL
PhoneOPTIONAL

Creating a Service Zone — real fields

A Name, plus one or more geographic areas (country / province / city level). This store’s zone uses the simplest possible area: the whole country of India as one zone. Real capability exists for finer splits (e.g. a separate zone for a specific state) — not used today.

Creating a Shipping Option — real fields

FieldNotes
Namee.g. “Standard Delivery”
Price Typeflat or calculated — this store uses flat. calculated would mean the rate comes from a live fulfillment provider (e.g. a real courier’s API) instead of a fixed number — not used today, since no live carrier is wired up
Shipping ProfileGroups shipping options by product type/handling requirements
Fulfillment Providermanual_manual today
Fulfillment OptionThe specific option offered by that provider
Shipping Option TypeA label/category for the option (e.g. “Standard” vs “Express”)
Enabled in StoreToggle — whether customers can actually select it at checkout
PriceSet per region/currency

IMPORTANT — real capability, not used today: shipping options support conditional pricing — a price that only applies above/below a cart-total threshold (e.g. “₹0 shipping if cart total ≥ ₹999”), configurable per region or currency directly in this form. This is a real, verified feature of the admin, not a hypothetical — worth knowing if the business ever wants a free-shipping threshold. [TO BE CONFIRMED] whether/when this should be set up; no such rule exists today, only the flat ₹49.

Shipping address, status, tracking, delivery

These are handled at the order level, not configured here — see [Section 8]/08-order-management/#fulfillment-status-values for status values and [Section 9, steps 10–13]/09-order-processing-sop/ for the real Fulfill/Ship/Deliver workflow and its Location/Tracking Number/Tracking URL/Label URL fields.

Real carrier integration status

IMPORTANT — do not invent courier names or delivery timelines, per the original brief’s own instruction.

A Shiprocket integration exists in the codebase (services/medusa/src/modules/fulfillment-shiprocket) that would create a real Shiprocket order/AWB/label automatically when an order is fulfilled — Phase 1, built and typechecked/boot-verified, but blocked on a real Shiprocket account/API credentials for end-to-end testing (.ai/next-tasks.md). It does not touch checkout pricing — the flat ₹49 is unchanged by it.

Phase 2 (live rate calculation at checkout, replacing the flat ₹49 with a real calculated rate) is a separate, later, more invasive change and has not been started.

Until Phase 1 is confirmed working with a real account, assume tracking numbers must be entered manually (see [Section 9]/09-order-processing-sop/#11-mark-as-shipped-add-tracking).

Business decisions not yet made

[TO BE CONFIRMED] — none of the following has a confirmed answer yet:

  • The real shipping cost (₹49 is a placeholder)
  • Whether a free-shipping threshold should exist
  • Real warehouse address
  • Whether zone/rate differentiation (e.g. remote pincode surcharge) is ever needed

[← Categories]/12-categories/ · [Index]/00-index/ · [Next: Payments →]/14-payments/