> ## Documentation Index
> Fetch the complete documentation index at: https://www.adorabl.info/llms.txt
> Use this file to discover all available pages before exploring further.

# Shipping labels

> Compare carrier rates, buy postage, and print labels from the pack stage of an in-house fulfillment.

Buy postage from the pack stage of an in-house fulfillment. The **Shipping** panel compares live carrier rates, purchases a label, and ships the fulfillment — including inventory relief and COGS — when the buy succeeds. Buying the label is the ship step; there is no separate "ship without a label" path for in-house orders.

adorabl uses the [EasyPost account connected to your organization](https://www.adorabl.info/commerce/shipping-account.md) to quote rates and charge postage.

## Prerequisites

Before you can load rates:

* A connected [shipping account](https://www.adorabl.info/commerce/shipping-account.md) with an active payment method.
* An **In-house** [fulfillment](https://www.adorabl.info/commerce/sales-orders-and-fulfillment.md#fulfillment-methods) at the **Packing** stage. Other fulfillment methods do not buy labels.
* A saved, weighed **package** in the pack workspace. adorabl never guesses weight.
* A complete **ship-to** address on the fulfillment (street, city, state, ZIP, and country).
* A [warehouse](https://www.adorabl.info/products/warehouses.md) with a complete **ship-from** address — the order's assigned warehouse.
* For international destinations: an **HS tariff code** and **country of origin** on every item in the package. See [Items](https://www.adorabl.info/products/items.md#customs).

| Prerequisite | Where |
| - | - |
| Ship-to | Fulfillment → Details → **Ship to** (editable during pack) |
| Warehouse address | Inventory → Warehouses |
| Package weight | Fulfillment → pack workspace |
| Item customs fields | Inventory → Items → **Customs** |
| Shipping account | Settings → Inventory → EasyPost account |

## Compare rates

**1. Open the fulfillment at pack**

1. In the sidebar, open **Commerce → Fulfillments** and click the **Packing** tile, or open **Commerce → Pack**.
2. Open the fulfillment.

The **Shipping** panel sits below the pack workspace.

**2. Confirm the ship-to**

The **Ship to** field in the Details card is editable while packing. Addresses are verified as you type. Changing it saves to the sales order and refreshes the rates.

**3. Save a weighed package**

Assign a box and enter the weight in the pack workspace, or read it from a connected scale. Rates load once a package with a weight is saved. If the panel still cannot quote, it shows repair fields for the missing weight, dimensions, or address.

**4. Pick a service**

Rates list carrier and service, delivery estimate, and cost, sorted cheapest first. **Cheapest** and **Fastest** badges mark the extremes, and the recommended service is selected for you. Click **Show all rates** to expand the list.

Address verification warnings and carrier messages appear under the list when the carrier returns them. Review those before you buy.

> [!TIP]
>
> Weight drives postage. If Trail Ridge packs a 48 oz carton as 16 oz, the label underpays and the carrier can surcharge or return the package.

## International shipments

When the ship-to country differs from the warehouse country, the Shipping panel adds a **Customs declaration**:

| Field | Notes |
| - | - |
| **Contents type** | Merchandise by default. Choose **Other** to add an explanation. |
| **Customs signer** | Defaults to the customer name; edit as needed |

adorabl builds the customs line items from the packed items — description, quantity, value, weight, **HS tariff code**, and **country of origin** — and files the shipment under the low-value exemption for declared values under \$2,500. Before quoting, it checks that every item carries an HS code and origin; if one is missing, the panel names the SKU and no label is bought.

Shipments valued at \$2,500 or more need an export filing number that adorabl does not yet capture. Split the shipment below that value or file the export separately.

## Buy and print a label

**1. Buy postage**

With a rate selected, click **Buy label**.

Before charging anything, adorabl confirms the shipment can post: every picked unit has a bin when the warehouse uses bin locations, and every item has a standard or average cost. If a check fails, the panel explains what to fix and no postage is spent.

When the checks pass, adorabl charges the selected rate, stores tracking, and ships the fulfillment — inventory is relieved, COGS posts, and the label cost is accrued.

If postage succeeds but posting fails afterward, the panel shows **Label purchased, fulfillment posting still pending** with the reason. Fix the cause and click **Retry posting** to finish the books without buying a second label.

**2. Print the label**

After purchase, the panel shows carrier, service, cost, tracking number, and a **Purchased** badge.

Click **Print label** to open the label PDF or image in a new tab.

> [!WARNING]
>
> **Buy label** spends postage. If rates have expired, adorabl refreshes quotes and asks you to re-select a service instead of charging a different rate.

## Track the package

Tracking status on the **Shipping** panel updates as the carrier scans the package. Exception statuses (failure, cancelled, return to sender) show as **Exception**.

## Label cost in your books

When a label is purchased and the fulfillment ships, adorabl accrues the label cost: it debits **Freight expense** and credits **Freight clearing**. Assign both accounts under [System accounts](https://www.adorabl.info/books/setup/system-accounts.md) before buying labels. When the carrier charge later clears your bank, reconcile it against Freight clearing.

## Void a label

Void only unused labels. A scanned or delivered package usually cannot be refunded.

**1. Confirm the void**

On a purchased label, click **Void label**, then confirm.

adorabl requests a carrier refund and voids the linked fulfillment so inventory comes back. The freight accrual is reversed with the fulfillment.

If the label cost has already settled with the carrier and no refund has been submitted, adorabl blocks the void and tells you why. Request the refund with the carrier first (or wait for the refund status to show **Refund submitted**), then void.

| Status | Meaning |
| - | - |
| **Refund submitted** | The carrier has the request. Funds are not back yet. |
| **Refunded** | The carrier refund posted to the connected account. |
| **Voided** | The label is cancelled. |
| Carrier refused | The label was likely scanned or used. The charge stands. |

Buying a label again after a void is a new charge.

## Example: Trail Ridge Outfitters

Order **SO-8820** for Aspen Sports Co. ships a carton from **Denver DC**:

1. The packer opens fulfillment **FL-5501** at the **Packing** stage, selects the **Medium carton** box, and reads **80 oz** from the scale.
2. adorabl quotes available carrier services. The recommended rate is **\$14.20**.
3. The packer clicks **Buy label**. adorabl confirms bins and item costs are in place, then charges the connected EasyPost account.
4. **FL-5501** ships with tracking; inventory and COGS post, and the \$14.20 accrues to Freight expense.
5. The warehouse prints the label and hands the carton to pickup.

An order to a customer in Toronto follows the same steps, plus the **Customs declaration** block. Because every daypack carries HS code `420292` and origin `VN`, rates load without a repair prompt.

## Related guides

> **[Sales orders & fulfillment](https://www.adorabl.info/commerce/sales-orders-and-fulfillment.md)**
>
> Confirm orders and work pick, pack, and ship.

> **[Items](https://www.adorabl.info/products/items.md)**
>
> HS tariff codes and country of origin for international labels.

> **[Warehouses](https://www.adorabl.info/products/warehouses.md)**
>
> Set ship-from addresses and the default shipping location.

> **[Connect a shipping account](https://www.adorabl.info/commerce/shipping-account.md)**
>
> Connect the EasyPost account used for postage.

## Troubleshooting

> **Shipping isn’t set up for this organization yet**
>
> Connect your organization's [EasyPost account](https://www.adorabl.info/commerce/shipping-account.md), then return to the fulfillment.

> **Rates do not load — weight required**
>
> Save a package with a weight in the pack workspace. adorabl does not default a package weight from the item catalog.

> **Rates do not load — address incomplete**
>
> Complete the **Ship to** in the Details card (street, city, state, ZIP, country). Also confirm the ship-from warehouse has a full street address — adorabl names the warehouse in the error and does not quote from a different location.

> **Complete item customs fields before buying an international label**
>
> One or more items in the package has no **HS tariff code** or **country of origin**. Add them on the item's **Customs** panel, then rate again. See [Items](https://www.adorabl.info/products/items.md#customs).

> **Buy label is blocked — assign bins or set item cost**
>
> adorabl stopped before spending postage because the shipment could not post. Assign bins for every picked unit from the fulfillment (**Review allocations**), or set a standard or average cost on the named items. Then buy the label.

> **Buy label reports a payment problem**
>
> Add or update the payment method directly in the connected EasyPost account. Reload the account-health page before trying again.

> **The carrier rejected the request**
>
> The panel shows the carrier's own reason — for example, an address line the carrier could not validate. Fix the ship-to or warehouse address it names and rate again.

> **Rates updated, re-select a service**
>
> Quotes expired or the package details changed. Pick a rate from the refreshed list, then click **Buy label** again.

> **Label purchased but fulfillment posting is pending**
>
> Postage already succeeded. Read the reason in the panel — usually missing bin allocations or an item without a cost — fix it, and click **Retry posting** so adorabl can ship the fulfillment without a second charge.

> **Void is refused**
>
> The carrier treated the label as used. You cannot undo that from adorabl. Inventory stays shipped unless you handle the return separately.

> **Void is blocked because the freight charge already settled**
>
> The label cost has cleared with the carrier and no refund is on file. Request the carrier refund so the status reads **Refund submitted** or **Refunded**, then void the label again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.