Written guide
Overview
Configure what the buyer can choose at checkout, connect the carrier integration and fulfil the selected order with a tracked shipment.
01. Delivery offer and dispatch origin
Why this matters
A delivery price shown to a buyer is not a purchased carrier label. The origin and parcel information must be usable for the later shipment.
Follow these steps
Open Storefront → Shipping → Settings → Shipping Methods → Add Method. Enter Name, Title, Currency, Active and the intended Use as the site default choice. In the current dedicated form, Ship from provides address fields directly: Warehouse name, Street, City, State, Postcode, country and Phone. It does not show a location/manual-address mode selector. Enter the actual complete dispatch address. Inspect product Weight, Length, Width, Height and packaging. Save and reopen both configuration and product.
Check the result
Do not substitute a warehouse label for a complete dispatch address. Keep weight/dimension units consistent with the selected rule/provider.

Shipping Settings keeps Shipping Methods, Providers and Product Shipping separate. The saved default method does not imply a connected carrier: this capture shows zero active integrations. Inspected historical screenshot; recapture current layout before final video.
02. Build eligible delivery options
Why this matters
An option combines where it applies with how its price is calculated. A more specific destination/class rule can change the choice.
Follow these steps
In Shipping Options add a customer-facing Label and Status. Set countries, states and postcodes; postcode rules allow exact values, prefixes such as 750*, and ranges. Set shipping classes and weight units/ranges where needed. Choose free, flat, weight, carrier or pickup. For flat enter rate and per-item choice; set free-over threshold when used. For weight enter tiers. For pickup configure the collection option. Inspect priority for equally specific options. Save and reopen.
Check the result
Empty geography means broad coverage; empty shipping classes represents ordinary goods in the schema. Test both a covered and excluded destination instead of promising worldwide shipping.
Save a controlled method and verify its fields
- Open Settings → Shipping Methods → Add Method. Enter a unique internal Name and a recognizable Title. Our isolated example is
course-shipping-1004/ Course US Standard, currency USD. Leave Active off and Use as the site default off while preparing a rehearsal that must not change existing checkout. - Choose Add a shipping option. In Name — What the customer sees, enter US standard delivery. Choose Flat fee under How it is priced, enter Amount 5, and leave Charge per item off for a per-order fee. Under Offered when → Countries, enter US. Empty countries would mean anywhere, so do not leave it blank by accident.

- Under Ship from, enter the actual dispatch address. The screenshot contains an explicitly fictitious course address and must not be copied for a real carrier request. Keep Fees and markup unchanged unless the handling policy requires them; a handling fee can change the total even when the option itself is flat.

- Choose Create configuration once. The method list now displays Course US Standard, $5.00 · US. Reload, choose its Edit, and inspect the same option and identity.


- Turn on Active only for a method you intend to offer, and choose the default deliberately after checking product overrides and existing methods. This local rehearsal remained inactive/non-default; it does not prove a customer was quoted five dollars. The later checkout chapter must test the selected method with an eligible and an excluded destination.
Important distinction: The card can display a saved rate even while its configuration is inactive. Reopen Edit to check Active/default rather than treating a price card as proof it is live.
03. Connect EasyPost or another implemented provider
Why this matters
The carrier integration supplies live rates and labels; the shipping option chooses when to use it.
Follow these steps
Open Configuration → Integration Config → Integration Builder. The current builder places EasyPostProvider under API (not a Shipping category); its card carries Shipping and Logistics use-case tags. Find that named card using the provider search or the All/API list and select it. For EasyPost enter a recognizable Name and the API key from the provider account, using its test environment for the controlled rehearsal. Save, use the offered Test and reopen the configuration. In the shipping carrier option select the saved integration and allowed services. Shippo is another implemented provider. Its schema requires API Token and exposes Test Mode, defaulting off. Set the intended test mode and token, save, test and reopen that record separately rather than pasting an EasyPost key into it.

Current Appmint Studio capture, 4 October 2026. The draft is blank and unsaved; this is not evidence of an active EasyPost connection.
Reach provider setup from Shipping
Settings → Providers shows provider cards and their Configure actions. The local screen reports 0 of 6 configured. EasyPost, Shippo, ShipEngine, StampsCom, FedEx and UPS appear as setup choices; the listing alone is not a working rate or label result.

This image was captured before the provider list settled: it shows “Checking setup” and 0 of 0, not the later observed 0 of 6. Do not use this loading frame as proof of the final provider list or tracking readiness.
The automatic tracking panel separately reports Not checked for a shared EasyPost configuration. It explicitly says the agreement, balance and tracking subscription have not been checked here. Do not translate that into “tracking is enabled”; complete and verify the relevant shared-account setup before claiming it works.
Keep the provider connection separate from the delivery offer
These are two records with different jobs. Integration Config supplies credentials for the carrier API. A Shipping Method defines what the buyer may choose, its eligible destinations and its pricing policy. Saving an EasyPost integration does not, by itself, create a customer-facing delivery choice.
For the current EasyPost provider schema, the credential field is API Key (apiKey). There is no separate EasyPost test/live switch in this schema: use the key from the intended provider environment. The provider help identifies its API Keys page and distinguishes Test from Production keys. Never infer environment from your configuration's name.
The current EasyPost Test operation lists up to ten shipments. It does not purchase a label or prove that a specific parcel/address can obtain a rate. Verify these as separate outcomes: saved provider configuration → successful connection response → eligible checkout delivery choice → parcel-specific rate → deliberately purchased test label. A label purchase and a carrier collection are also different events.
Source checked 4 October 2026; no carrier request or label purchase was made in this enrichment pass.
Check the result
Mask credentials in capture. A saved or tested key is not a purchased label. EasyPost’s provider help distinguishes test and production keys; do not mix the environments. Carrier availability depends on the configured account.
04. Verify the customer choice
Why this matters
The address, product override and selected service determine the delivered total.
Follow these steps
Open the customer product and cart. Enter the intended shipping address and inspect eligible options, service labels, prices and total. Select one option and verify it remains selected through checkout. Compare a second destination and a product with Shipping Config/Flat Rate override or exclusions.
Check the result
Failed quotes must show their error or unavailable state. Do not quietly present a flat fee as proof that live carrier rates worked.
05. Create the linked shipment
Why this matters
The shipment wizard connects a saved order to addresses, packages and a selected rate.
Follow these steps
Open Shipping → Create and search/select the intended order. Inspect From and To, including recipient and contact. Add Package and enter length, width, height and weight. Choose Get Rates, wait for Select Shipping Rate and select the intended service. Choose Create Shipment once. Inspect Shipment Created, order number, carrier, tracking and label. Use Download Label or Print Label, then reopen Shipments and the original order.
Check the result
Creating a live label may incur provider cost; use the authorized test environment for recording. After an unclear response inspect existing shipments before repeating Create Shipment.
06. Tracking and corrections
Why this matters
A created label, dispatched parcel and delivered parcel are different stages.
Follow these steps
Use Track Package and inspect shipment status and the matching order/customer view. For an incorrect address or parcel stop before purchasing a replacement and inspect the existing shipment’s available cancel/refund/correction action. Record the provider result and new reference separately if a replacement is required.
Check the result
Unsupported carrier correction paths must be shown as limitations rather than invented buttons.
Detailed instructions
The following retained material documents earlier local work. Its pending checks remain pending; historical successful outcomes are not claims of a fresh execution. Use the source-authored instructions above to prepare the new recording, and preserve these references for comparison.
E09: Charge for delivery deliberately
Worked example
A customer needs the delivered price, so Cedar uses one five-dollar fee per order. Open Shipping, Settings and Add Method. Name it course-flat-shipping and title it Course standard delivery. Keep USD and Active, and select Use as the site default. Add a shipping option named Standard delivery. Choose Flat fee, enter five and leave Charge per item unchecked. That charges five for the order, not five for every print. Create configuration. Reload Shipping Methods and check the saved default before testing the customer cart.
Included controls: Settings Overview, Shipping Methods, Add Method, configuration identity, currency, Active, default, Flat fee, Charge per item, save readback.
Check the result: Default course-flat-shipping; actual shopper shipping5 later confirms per-order meaning.
Retained evidence: capture/SF06-shipping.webm, capture/SF21-variants-and-providers-readback.webm.
Implementation reference: shipping-config-form.tsx, shipping-options-editor.tsx.
Next-batch matching evidence: SF06-shipping.webm.
E10: Offer delivery only where it works
Learner draft — pending demonstration:
A flat price is useful only where the shop can deliver. In Offered when, destinations and ranges decide whether an option is available. Our rehearsal normally leaves geographic limits blank. Test any restriction with both an included and excluded address before relying on it: the retained local comparison allowed an excluded Ohio address to continue with zero shipping. That is historical failure evidence, not a new check of the installed build; repeat the included/excluded-address comparison before relying on the boundary. Tax needs its own calculation check. Product Taxable is only one input. AppEngine reads configured jurisdiction tax records; the location flat rate is a fallback when no destination is supplied. A shipping address does not create a tax rule, and setting Taxable does not prove a nonzero tax result.
Included controls: Offered when, country/state/postcode, product class, weight range, quantity range, order-total range, tax prerequisite.
Limitations and checks: Capture Offered when controls and precise boundary wording, add controlled geographic/range test, show included/excluded cart. Inspect real tax configuration entry, record nonzero-tax calculation and rounding without inventing tax policy.
Check the result: Matched destination offered, excluded destination not offered, exact subtotal/shipping/tax breakdown.
Implementation reference: shipping-options-editor.tsx, tax.service.ts.
A14: Prepare and track a shipment
Learner draft — pending demonstration:
The five-dollar delivery offer priced the purchase. Now Shipping manages the parcel. Start from the matching order, confirm the ship-from location and packed measurements, then use the supported shipment method. If a connected carrier provides a quote or label, compare it with the intended parcel before purchase. Follow the shipment's tracking and history separately from the order's payment state.
Included controls: Dashboard, Shipments, Create Shipment, ship from, packaging, weight/dimensions, provider quote, label, tracking, manual status.
Limitations and checks: Actual Create Shipment fields/navigation→supported shipment, provider test quote/label if available, tracking and manual state. Resolve/log automatic tracking404 with retest; do not assert status equals physical delivery.
Check the result: Order/address/parcel/label or manual-shipment reference agree; tracking source/states explained.
Implementation reference: shipping-create.tsx, shipping-tracker.tsx, shipping-auto-tracking.tsx.
A15: Give one product different shipping needs
Worked example
A product exception should change the delivery rule for a reason. Open Shipping, Settings and Product Shipping. Cedar Botanical Print currently says Default. Use that row’s gear to open its controls. Shipping Method offers Use site default, Free Shipping and Custom Flat Rate. Shipping Configuration can stay Default configuration or select course-flat-shipping; Ships From Location identifies the origin. We keep the print’s current default and cancel without saving. This is where you inspect an exception; it is not proof that an override changed the customer quote. Shipping Methods separately shows Course standard delivery, a five-dollar flat rate. Providers lists six choices, including EasyPost, and currently zero configured integrations. EasyPost Configure opens an Inactive API-key form with Test Connection; we cancel it too. A flat delivery quote is separate from purchasing a carrier label or enabling tracking. The retained automatic-tracking attempt returned HTTP 404. Its current resolution has not been verified by this capture, so repeat the operation on the installed build before claiming tracking is enabled.
Included controls: Product Shipping, Ships As, product config override, weight/unit/dimensions, boxes, free/flat override, origin, signature, hazmat, fragile, country/state exclusions, currency.
Verified scope / remaining work: Actual settings tabs, product gear choices and EasyPost blank form inspected/cancelled. Override save/quote, dimensions/packaging, origin availability, provider/label/tracking outcome pending.
Check the result: Override selected over default where supported; actual shipping result not just field readback.
Implementation reference: product-shipping-settings.tsx, product-form.tsx.
Actual evidence: SF43-shipping-settings.webm, SF44-shipping-forms.webm.
T13: Choose a different delivery model
Learner draft — pending demonstration:
Flat delivery suited our first print. Free, weight-based, carrier-priced and pickup choices answer different delivery promises. Compare only the settings that change the customer's offer: where it is available, how it is charged and what fulfilment must do. Carrier pricing needs a connected provider, a ship-from address and appropriate measurements. Choose the route you can actually operate, then check an eligible and ineligible basket.
Included controls: free, weight-based, carrier-based, pickup, per-item versus per-order, Shipping Providers, EasyPost/Shippo/ShipEngine/StampsCom/FedEx/UPS, quote prerequisites.
Limitations and checks: Each actual shipping pricing mode/condition, per-item versus per-order quantity comparison, pickup meaning, provider-specific exposed setup and sandbox quote/label prerequisites; precise available/error/unsupported boundary for each exposed carrier.
Check the result: All materially different rate/fulfilment alternatives actualbuyerchoice and result; no labelbuy implied by rate.
Implementation reference: shipping-options-editor.tsx, shipping-integrations.tsx.
Limitations and checks
Current UI entry and editor: . Corresponding SDK storefront schemas and the retained AppEngine references define fields and consumer boundaries. Provider calls, external delivery, payments and financial mutations were not performed for this writing task.
Next steps
You can now follow the module from its configuration to the record that proves the result. Use the relevant chapter to revisit an alternative or troubleshoot the exact failed handoff.
