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

# Customs and documents

> Parcel customs lines, Term of Trade, Documents tab types (Label, CN22, invoices), and download or print.

Customs data is entered on **order lines** (country of origin, tariff, value). Trade documents appear on the shipment **Documents** tab **after** a successful [send](/docs/how-to/send-a-shipment) — either returned by the carrier with the label, or generated from a shipping-rule toggle.

Journey: [Create a shipment](/docs/tutorials/create-a-shipment) and [Labels and printing](/docs/tutorials/labels-printing).

<Info>
  Zippendo has **no separate CN22 form**. **CN22 Customs Declaration** / **CN23 Customs Declaration** are document **types** on **Documents** when the carrier (or a job) produced that file. You prepare them by filling line-level customs fields and **Term of Trade**.
</Info>

## Term of Trade

On **Create Shipment** → **Basic Information**, **Term of Trade** defaults to **DAP**. Change it when the destination needs a different Incoterm. On shipment **Overview** it is read-only under **Shipment Information**.

## Parcel customs fields (create)

**Add Parcel** / **Edit Parcel**. Subtitle: **Configure parcel weight, dimensions, and order lines**.

**Package**

| Field                  | Required | Notes                                                   |
| ---------------------- | -------- | ------------------------------------------------------- |
| **Weight \***          | Yes      | Number ≥ 0. Validation: **Weight must be 0 or greater** |
| **Weight Unit \***     | Yes      | `kg`, `g`, `lb`, `oz`                                   |
| **Dimensions (cm) \*** | Yes      | **Length**, **Width**, **Height** — each ≥ 0            |

**Order Lines** — at least one (**At least one order line is required**). **Add Order Line**. Empty: **No order lines yet. Add an order line to get started.**

Each **Order Line {{number}}**:

| Field                 | Required                                            | Placeholder / rules                           |
| --------------------- | --------------------------------------------------- | --------------------------------------------- |
| **SKU \***            | Label says required; blank SKUs are stored as empty | **SKU**                                       |
| **Quantity \***       | Yes                                                 | Integer ≥ 1 — **Quantity must be at least 1** |
| **Description**       | For customs completeness                            | **Product description**                       |
| **Unit Price**        | Needed for declared value                           | `0.00`                                        |
| **Currency**          | 3 letters                                           | `USD` (use `DKK`, `EUR`, …)                   |
| **VAT %**             | Optional                                            | 0–100                                         |
| **Location**          | Optional                                            | Warehouse bin                                 |
| **Country of Origin** | 2-letter ISO                                        | `US` / `DK`                                   |
| **Tariff Number**     | HS code                                             | **Tariff number**                             |

Save: **Save**. Cancel: **Cancel**.

Carriers that cross a customs border expect **description**, **quantity**, and **unit price > 0** on every line. Missing those at send: **The customs declaration is incomplete. Each item needs a description, a quantity, and a declared value greater than zero.** (`CARRIER_CUSTOMS_INCOMPLETE`). Wrong product: **This carrier product cannot carry a customs declaration. Choose a customs-capable product for shipments that cross a customs border.** (`CARRIER_CUSTOMS_UNSUPPORTED_PRODUCT`).

<Frame caption="Add Parcel — weight, dimensions, and line fields including Country of Origin and Tariff Number">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/01-parcel-customs-fields-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=29e53e6d6240671bf21eb6784d4d2052" alt="Edit Parcel dialog with weight, SKU, country of origin, and tariff number" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/01-parcel-customs-fields-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/01-parcel-customs-fields-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=91538f7f54c00a0f94a620f5f394388c" alt="Edit Parcel dialog with weight, SKU, country of origin, and tariff number" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/01-parcel-customs-fields-dark.png" />
</Frame>

## Edit package (existing shipment)

On **Package Details**, **Edit package** (or the row) while status is **Draft**, **Pending**, or **Error**. Title: **Edit package**. Subtitle: **Package #{{number}} · Saving updates this shipment (all packages are re-saved).**

Same fields, slightly different labels (no asterisks on SKU):

| Field                        | Notes                                                                                                                                                                                                            |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Weight** / **Weight unit** | `kg`, `g`, `lb`, `oz`                                                                                                                                                                                            |
| **Dimensions (cm)**          | **Length**, **Width**, **Height**                                                                                                                                                                                |
| **Line {{number}}**          | **SKU**, **Quantity**, **Description**, **Unit price**, **Currency** (`DKK`), **VAT %**, **Location** (placeholder **Warehouse bin**), **Country of origin** (`DK`), **Tariff number** (placeholder **HS code**) |
| **Add line**                 | Appends a line                                                                                                                                                                                                   |
| Trash                        | Hidden if only one line remains (**At least one line is required**)                                                                                                                                              |

Save: **Save** / **Saving…**. Toast: **Shipment updated successfully** / **Failed to update shipment**.

<Frame caption="Edit package on a pending shipment — customs fields on each line">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/02-edit-package-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=b39460616f5a5238040a9d1a94ee7235" alt="Edit package modal with weight, country of origin, and tariff number" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/02-edit-package-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/02-edit-package-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=9c158c6e859a2a8bbab86096e5839696" alt="Edit package modal with weight, country of origin, and tariff number" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/02-edit-package-dark.png" />
</Frame>

On **Package Details**, tariff shows as **Tariff: {{number}}** under the line.

## Documents tab

Shipment tabs: **Overview**, **Documents** (badge = count), **Tracking** (only if tracking exists). **Documents** is empty until send: **No documents** / **Generated labels and system documents will appear here when available.**

After send, **Print All** appears in the card header.

Columns:

| Column      | Content                                       |
| ----------- | --------------------------------------------- |
| **Type**    | See types below                               |
| **Format**  | `PDF`, `PNG`, `JPG`, `ZPL`, `SVG` (uppercase) |
| **Size**    | Label size, for example **A4**                |
| **Created** | Date                                          |

Row click opens the viewer. Row menu:

| Action       | What it does                                                          |
| ------------ | --------------------------------------------------------------------- |
| **View**     | Opens the document modal                                              |
| **Download** | Saves `{type}.{format}` (for example `label.pdf`) through the browser |
| **Print**    | Creates a Zippendo printer job — **not** the browser print dialog     |

**Type** values (i18n):

* **Label**
* **Customs Invoice**
* **Commercial Invoice**
* **Proforma Invoice**
* **Packing List**
* **Certificate of Origin**
* **CN22 Customs Declaration**
* **CN23 Customs Declaration**
* **Other**

If only **Label** is listed, nothing else was generated for that shipment. Testenv carrier fakes return a **Label** PDF; CN22/invoices depend on the live carrier or a shipping-rule job.

<Frame caption="Documents after send — Label row with format, size, View, Download, Print, and Print All">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/03-documents-tab-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=2792bf888ff340c22e699b16dee2aabd" alt="Shipment Documents tab with a Label PDF row and Print All" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/03-documents-tab-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/03-documents-tab-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=52a1ca14b649aff7216adfeea2c8c1b5" alt="Shipment Documents tab with a Label PDF row and Print All" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/03-documents-tab-dark.png" />
</Frame>

### Viewer

Modal title = document type (**Label**, **CN22 Customs Declaration**, …). Subtitle: **{{FORMAT}} • {{size}} • {{date}}** (for example **PDF • A4 • 10 Sep 2026**). PDFs render in an iframe; images render as a picture. There is no rotate control here — rotation is a printer setting.

<Frame caption="View opens the Label modal with a PDF preview">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/04-label-viewer-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=c6fdeef3db3ee147ffe9789ff28b3e9d" alt="Document viewer modal titled Label showing a PDF shipping label" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/04-label-viewer-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/04-label-viewer-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=c46e6876527149731b5f6036eca021bd" alt="Document viewer modal titled Label showing a PDF shipping label" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/04-label-viewer-dark.png" />
</Frame>

On an order shipment card, the ⋮ menu can **Download** each **Label** by format and other documents by type.

## Print

**Print** / **Print All** create jobs for the [Zippendo Printer Client](/docs/how-to/add-a-printer). Labels go to a **Label** printer; invoices, packing lists, and CN22s go to a **Document** printer.

If no printer is configured, **Print Documents** opens:

| Field                | Copy                                                                                                         |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| Title                | **Print Documents**                                                                                          |
| Help                 | **Select which printer(s) to use for this shipment's documents.**                                            |
| **Label Printer**    | **{{count}} label(s) will be sent to this printer**                                                          |
| **Document Printer** | **{{count}} document(s) will be sent to this printer**                                                       |
| Empty                | **No active printers found…** / **No active label printers found…** / **No active document printers found…** |

Confirm: **Print**. Toasts: **{{count}} print job(s) created** / **{{count}} document(s) failed to print**.

<Frame caption="Print All opens Print Documents when no printer is set on the shipment">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/05-print-all-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=4fab110772787cb4e50da866e91cce5f" alt="Print Documents modal asking for a label printer" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/05-print-all-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/05-print-all-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=2a3ca16072a7261a10a20dac1f8ff6ff" alt="Print Documents modal asking for a label printer" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/05-print-all-dark.png" />
</Frame>

Set printers earlier on the shipment — [Shipment printer settings](/docs/how-to/shipment-printer-settings) — or auto-print from a rule ([Auto-print](/docs/how-to/auto-print)).

## Shipping-rule document generation

On **Shipping rules → New**, **Document Generation**:

| Toggle                          | Copy                                                                                                   |
| ------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Generate Proforma Invoice**   | **Automatically generate a proforma invoice for international shipments.**                             |
| **Generate Commercial Invoice** | **Automatically generate a commercial invoice with exporter/importer details, HS codes, and weights.** |
| **Generate Packing List**       | **Generate a packing slip with package and item details for the shipment.**                            |

There is **no Generate CN22** toggle. Some carriers (FedEx, DHL Express, UPS, PostNord, Bring) file the declaration themselves. Then the rule shows: **{{carrier}} produces the customs declaration and commercial invoice itself and returns them with the label, so Zippendo does not generate its own copies for this rule.** The two invoice checkboxes are hidden.

Jobs run **after send**. Background jobs are not processed in the local testenv, so a rule toggle may not add extra rows until production workers run.

<Frame caption="Document Generation on a new GLS shipping rule — proforma, commercial invoice, packing list">
  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/06-document-generation-light.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=28c63ba12a2e369dfee656aebcd98271" alt="Shipping rule form Document Generation with invoice and packing list checkboxes" className="block dark:hidden" width="2880" height="1800" data-path="images/how-to/customs-and-documents/06-document-generation-light.png" />

  <img src="https://mintcdn.com/zippendo/-jr41VsJfvHKJJ2U/images/how-to/customs-and-documents/06-document-generation-dark.png?fit=max&auto=format&n=-jr41VsJfvHKJJ2U&q=85&s=a55b066c30e3148e4333e8bc1050528a" alt="Shipping rule form Document Generation with invoice and packing list checkboxes" className="hidden dark:block" width="2880" height="1800" data-path="images/how-to/customs-and-documents/06-document-generation-dark.png" />
</Frame>

Organization-level **VOEC**, **EORI**, **SPRN**, **IOSS**, **FDA**, **DUNS** (Settings → Organization) and brand **Customs identifiers** are stamped onto bookings — [Organization settings](/docs/how-to/organization-settings), [Create a brand](/docs/how-to/create-a-brand). They are not fields on this shipment screen.

<Check>
  Fill **Country of Origin**, **Tariff Number**, **Description**, **Unit Price**, and **Term of Trade** before [Send Shipment](/docs/how-to/send-a-shipment). Then use **Documents** to view, download, or print the **Label** and any customs files the carrier or rule produced.
</Check>
