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

# Shipments, labels and tracking

> Create shipments from an order, print labels, follow tracking and cancel shipments.

A shipment belongs to an order. You create it on the order card, either through a connected courier account, which
books the shipment with the carrier and gets you a label, or as an external shipment that you booked somewhere else.
Omnilinker then polls the carrier for tracking and shows every shipment on the **Shipments** list.

Before you start, connect a courier account; see [Courier accounts](/shipping/courier-accounts). You also need the
permissions in [Permissions](#permissions).

## Create a shipment through a courier

<Steps>
  <Step title="Open the order">
    Open **Sales** > **Orders** and open the order. Scroll to the **Shipments** section of the order card.
  </Step>

  <Step title="Start the shipment">
    Click **+ Create via courier**. The **Create shipment via courier** dialog opens.

    If the button is greyed out, you have no courier account yet: "Add an enabled courier account first (Courier
    accounts page)."
  </Step>

  <Step title="Choose the account and service">
    * **Courier account**: the account to book with, shown as its name and carrier. The first account is selected.
    * **Service**: the carrier's service; see [Services](#services).
  </Step>

  <Step title="Describe the parcel">
    * **Weight (kg)**: 1 by default.
    * **Width (cm)**, **Height (cm)**, **Length (cm)**: optional.

    The dialog creates a shipment with one parcel.
  </Step>

  <Step title="Add cash on delivery, insurance and a reference, if needed">
    * **Cash on delivery amount**: leave it empty for no cash on delivery.
    * **Insurance value**: leave it empty for no insurance.
    * **Reference**: free text, up to 128 characters, shown on the label and in the carrier's tracking.

    Amounts are in PLN.
  </Step>

  <Step title="Choose the parcel locker, for InPost locker services">
    For **InPost Parcel Locker (Standard)** and **InPost Parcel Locker (Max)**, the dialog adds **Parcel locker / pickup
    point**, which is required. Type the locker code, or click **Choose a parcel locker** to pick it on the map. The
    dialog shows "Selected point: " followed by the code.

    The map button appears only when your organization has saved an InPost Geowidget token; see
    [InPost settings](/shipping/courier-accounts#inpost-settings). Omnilinker does not copy the pickup point the buyer
    chose into this field; take it from the order.
  </Step>

  <Step title="Create the shipment">
    Click **Create shipment**. Omnilinker books the shipment with the carrier and the dialog waits for the label; see
    [Get the label](#get-the-label).
  </Step>
</Steps>

The recipient comes from the order: the delivery address, and the buyer's e-mail address and phone number. You cannot
change them in the dialog. Check the order's delivery address before you create the shipment.

<Warning>
  Creating a shipment is a real booking with the carrier on a **Production** account, and it may be charged. For
  Apaczka, every shipment is a real charge.
</Warning>

### Services

| Carrier | Services in the dialog                                                                                                                                     |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| InPost  | **InPost Parcel Locker (Standard)**, **InPost Parcel Locker (Max)**, **InPost Courier (Standard)**, **InPost Courier (C2C)**, **InPost Courier (Express)** |
| DPD     | **DPD Classic (domestic)**                                                                                                                                 |
| Apaczka | The services available in your Apaczka account, each shown with its carrier. Omnilinker refreshes this list from Apaczka at most once every 24 hours.      |

The dialog does not show prices.

For Apaczka, the dialog has no pickup-point field, so services that deliver to a pickup point cannot get one from
Omnilinker.

<Note>
  DPD and Apaczka shipments cannot be created yet: they need a sender address that you cannot enter in Omnilinker yet.
  See [Sender address and pickups](/shipping/courier-accounts#sender-address-and-pickups).
</Note>

## Get the label

After you click **Create shipment**, the dialog shows "Shipment created — waiting for the courier to confirm the
label...", then "Label ready." with a **Download label** button. You can close the dialog while it waits: Omnilinker
keeps fetching the label in the background.

InPost confirms the label a few seconds after the booking. If a label is not ready within about two minutes, Omnilinker
tries again up to five more times, with gaps growing from 30 seconds to 10 minutes.

Omnilinker always stores the label as a PDF file, named `label-<shipment-id>.pdf`. For InPost and DPD it also stores a
ZPL copy for thermal label printers, when the carrier returns one. For DPD, one label file covers every parcel of the
shipment.

To get the label later, open the shipment on the **Shipments** list; see [Print labels](#print-labels). You need the
**Download shipment labels** permission.

## Print labels

Omnilinker can send a label straight to a printer connected to a station: a Windows PC next to the printer that runs
the station app. Setting up stations and printers is covered in [Devices and printing](/devices/overview).

Printing needs the **Print** permission and a station you can print at. Pick the station you work at with
**Choose station** in the top bar; the print buttons use it. See [Choose your station](/devices/choose-station).
Without printing, you download the label instead; see [Download instead of printing](#download-instead-of-printing).

### Print one label

<Steps>
  <Step title="Open the shipment">
    On the **Shipments** list, click the shipment's row to open its details.
  </Step>

  <Step title="Print">
    Click **Print label**, or press P. The line under the button says where the label goes, for example
    "On Zebra at Packing desk 1".

    If you have not chosen a station, the line says **Choose where to print** and the button opens the printer menu.
  </Step>
</Steps>

To print somewhere else, click the arrow next to **Print label**. The menu lists the printers at your station
(**Your station** · followed by its name), the default printer of each of **Other stations**, and a download for each
stored format, such as **Download PDF** and **Download ZPL**. A printer that cannot take the label is greyed out.

A message then says what happened:

* "Printing on … at …." The label is on its way to that printer.
* "… at … has stopped — the label waits there until it's back." The printer or its station has stopped, and the label
  prints when it is back.
* "No station could take this label. See Print jobs to choose one." Choose a printer for the job on **Devices** >
  **Print jobs**; see [Print a job somewhere else](/devices/print-jobs#print-a-job-somewhere-else).

Printing a label again prints another copy.

### Print a label that has not arrived yet

While the carrier has not sent the label, the button reads **Print when it arrives**. Click it and the label prints as
soon as the carrier sends it, at the printer you chose or at your station. The shipment then shows "Prints as soon as
… sends the label".

### Labels that print by themselves

A shipment remembers the station its creator had chosen in the top bar. When the carrier sends the label, it prints at
that station by itself, unless the station, or its location, is set not to print labels automatically. Automatic
printing is on unless someone turns it off. When your station prints automatically, the shipment details show
"Labels at … print automatically" with a **Change** link.

A shipment created without a station does not print by itself: print its label by hand. A label that someone asked to
print when it arrives prints only there, not twice. See [Automatic printing](/devices/automatic-printing).

### Print many labels at once

<Steps>
  <Step title="Select the shipments">
    On the **Shipments** list, tick the shipments whose labels you want. The checkbox in the header selects every
    shipment on the page. Your selection stays when you change the page or the filters.
  </Step>

  <Step title="Print">
    The bar above the list shows how many shipments are selected. Click **Print N labels**, or use its arrow to choose
    a printer. Labels the carrier has not sent yet are counted too, and print when they arrive.
  </Step>
</Steps>

The labels print as one batch, in the order you selected the shipments. You can print up to 200 labels at once.
**Clear selection** unticks everything.

After you print, a panel follows the batch: how many labels are printed, printing, waiting, on hold and need attention,
and which orders are still waiting for the carrier's label. **Cancel the rest** cancels the labels that have not
printed yet. **Hide** closes the panel.

### The Label column

The **Label** column of the **Shipments** list shows each shipment's label:

| Value                      | Meaning                                                                        |
| -------------------------- | ------------------------------------------------------------------------------ |
| **Not printed**            | The label is here and has not been printed.                                    |
| **Printed**                | The last print of the label finished.                                          |
| **Printing**               | A station is printing it now.                                                  |
| **Waiting**                | The print is queued.                                                           |
| **On hold**                | The print is held, for example because the printer or its station has stopped. |
| **Failed**                 | The print failed.                                                              |
| **Not sure it printed**    | The station could not confirm the print.                                       |
| **Label pending**          | The carrier has not sent the label yet.                                        |
| **Prints when it arrives** | Someone asked to print the label as soon as the carrier sends it.              |
| —                          | The shipment is external, or no label will come.                               |

The print states need the **Download shipment labels** permission; without it, every label that is here shows **Not
printed**.

### Download instead of printing

When printing is off for your organization, you do not have the **Print** permission, or there is no station you can
print at, the button is replaced by **Download PDF**. If the label has a ZPL copy, **Download ZPL for a thermal
printer** appears next to it. Open the PDF and print it from your PDF viewer.

With no station at all, the button also offers **Skip the download**, with **Set up a station** and **Not now**.

## Add an external shipment

Use an external shipment for a parcel you booked outside Omnilinker, so the order still shows how it was sent.

<Steps>
  <Step title="Open the form">
    In the order's **Shipments** section, click **+ Add external shipment**.
  </Step>

  <Step title="Fill it in">
    * **Carrier**: the carrier's name, as free text. Required, up to 128 characters.
    * **Tracking number**: optional.
    * **Dispatched**: the date you sent the parcel. Optional.
  </Step>

  <Step title="Save">
    Click **Save**. The shipment appears with the **manual** tag.
  </Step>
</Steps>

Omnilinker does not track external shipments. A new external shipment has the status **Label created**, or **Shipped**
if you entered a **Dispatched** date. To change the status later, pick it in the **Status** column of the order's
**Shipments** section: **Label created**, **Shipped**, **Out for delivery**, **Delivered**, **Being returned** or
**Canceled**. Once a shipment is **Delivered**, **Lost** or **Canceled**, its status cannot change any more.

Only the **Dispatched** date marks an external shipment as dispatched; see
[What happens to the order](#what-happens-to-the-order). Choosing **Shipped** in the **Status** column does not.

## The order's Shipments section

The **Shipments** section of the order card lists the order's shipments, newest first, with **Carrier**, **Tracking
number**, **Status** and **Dispatched**, and a **Cancel** button. With no shipments, it says "No shipments yet.".

The buttons that change shipments also need the **Edit order** permission. Without it, the section is read-only.

## The Shipments list

Open **Shipments** > **Shipments** to see the shipments of all orders, newest first, 25 per page.

| Column                | Shows                                                                                        |
| --------------------- | -------------------------------------------------------------------------------------------- |
| **Carrier / service** | The carrier, and below it the recipient's city. External shipments carry the **manual** tag. |
| **Tracking number**   | The tracking number of the shipment's first parcel.                                          |
| **Status**            | The shipment's status; see [Statuses](#statuses).                                            |
| **Label**             | Whether the label is here and printed; see [The Label column](#the-label-column).            |
| **Order**             | The order number, which opens the order.                                                     |
| **Dispatched**        | When the shipment was dispatched.                                                            |

Rows with a problem status (**Delivery failed**, **Exception** or **Lost**) are highlighted.

To narrow the list:

* The search box finds a tracking number, a carrier, the carrier's shipment ID, or an exact order number.
* **All statuses**: show one status only.
* **Account: all**: show the shipments of one courier account.
* **More filters**: **Dispatched from**, **Dispatched to**, **Carrier** and **Recipient country**. Click **Apply**, or
  **Clear** to remove them. The date filters only match shipments that have been dispatched.
* **Problems only**: show shipments with the status **Delivery failed**, **Exception** or **Lost**. The badge on the
  button counts them across all your shipments.

The checkboxes select shipments for printing; see [Print many labels at once](#print-many-labels-at-once). The export
button does nothing yet: export is not available.

### Shipment details

Click a row to open the shipment's details on the right:

* the status, the carrier and the tracking number, with a copy button;
* **Print label**, or **Print when it arrives** while the carrier has not sent the label; see
  [Print labels](#print-labels). Without printing, **Download PDF** replaces it. **No label (external)** means no label
  will come: the shipment is external, or it was cancelled before the label arrived;
* **Order #**, which opens the order, and **Cancel**; see [Cancel a shipment](#cancel-a-shipment);
* **Recipient**, **Parcel** (weight and dimensions), **Cash on delivery** and **Insurance**. The recipient shows
  **(anonymized)** when the shipment has no recipient name;
* **Tracking history**, newest first. Each event shows its status, date and time, the carrier's description and
  place, and the carrier's own status code.

Close the details with × or Escape. Press P to print the label.

## Statuses

Omnilinker translates each carrier's tracking codes into one set of statuses. The carrier's own code is kept on every
tracking event.

| Status                      | Group           | Meaning                                                                                |
| --------------------------- | --------------- | -------------------------------------------------------------------------------------- |
| **Unknown**                 | Unknown         | No status yet, or Omnilinker does not recognize the carrier's code.                    |
| **Label created**           | Before dispatch | The shipment is booked and has a label, but the parcel is not with the carrier yet.    |
| **Shipped**                 | In transit      | The parcel is with the carrier.                                                        |
| **On the way**              | In transit      | The parcel is moving through the carrier's network.                                    |
| **Transferred abroad**      | In transit      | The parcel was handed to a carrier abroad.                                             |
| **Out for delivery**        | In transit      | The parcel is out for delivery today.                                                  |
| **Waiting at pickup point** | Needs attention | The parcel is waiting for the recipient at a parcel locker or pickup point.            |
| **Delivery notice left**    | Needs attention | The carrier left a delivery notice; the recipient must arrange delivery or collection. |
| **Delivered**               | Delivered       | The parcel was delivered. Final.                                                       |
| **Delivery failed**         | Problem         | A delivery attempt failed.                                                             |
| **Exception**               | Problem         | Something went wrong in transit, such as damage, a customs hold or an address problem. |
| **Lost**                    | Problem         | The carrier reports the parcel as lost. Final.                                         |
| **Being returned**          | Closed          | The parcel is on its way back to you. Omnilinker keeps tracking it.                    |
| **Canceled**                | Closed          | The shipment was cancelled. Final.                                                     |

## Tracking

Omnilinker asks the carriers for tracking updates every 20 minutes. Carriers do not push updates to Omnilinker, so a
new status can take up to 20 minutes to appear.

* Shipments created in the last 30 days are checked every 20 minutes.
* Shipments 30 to 60 days old are checked once a day.
* Shipments older than 60 days are no longer checked.
* Tracking stops when a shipment is **Delivered**, **Lost** or **Canceled**.

Some shipments are never tracked:

* **DPD**: tracking is not available yet, so DPD shipments stay at **Label created**.
* **External shipments**: you set their status yourself.
* **Shipments of a deleted courier account**.

Omnilinker does not send tracking e-mails to the buyer. For an order imported from a marketplace, Omnilinker sends the
tracking number to the marketplace when the shipment's status first changes.

## What happens to the order

A shipment counts as dispatched when its first tracking update shows it past **Label created**, or, for an external
shipment, when you enter its **Dispatched** date. Omnilinker then fills in the **Dispatched** date.

To move the order forward at that moment, turn on **Auto-mark orders as Sent on dispatch**:

<Steps>
  <Step title="Open the automation settings">
    Open **Sales** > **Order statuses** and choose the **Automation** tab. You need the **Manage statuses**
    permission.
  </Step>

  <Step title="Turn the setting on">
    Select **Auto-mark orders as Sent on dispatch**. It is off by default.
  </Step>
</Steps>

With the setting on, when a shipment of an order is dispatched, Omnilinker changes the order to your Sent-type status.
That also turns the order's reserved stock into a deduction. Nothing changes if the order already has a Sent- or
Delivered-type status, or if you have no Sent-type status. See [Order settings](/sales/order-settings).

Cancelling a shipment does not change the order's status.

## Cancel a shipment

On the **Shipments** list, open the shipment and click **Cancel**. Confirm in **Cancel this shipment with the
courier?** with **Cancel shipment**, or click **Back**. The shipment gets the status **Canceled**.

You can also click **Cancel** in the order's **Shipments** section. It cancels straight away, without asking.

| Carrier  | Cancelling                                                                                                                    |
| -------- | ----------------------------------------------------------------------------------------------------------------------------- |
| InPost   | Omnilinker asks InPost to cancel the shipment. The label is voided if InPost allows it.                                       |
| Apaczka  | Omnilinker asks Apaczka to cancel the order. Apaczka does not guarantee a refund: the shipment may already have been charged. |
| DPD      | Not available. Cancel the shipment with DPD.                                                                                  |
| External | Omnilinker only marks the shipment as cancelled. Cancel it with the carrier yourself.                                         |

**Cancellation unavailable** replaces the button when the carrier does not support it or the shipment is already
**Delivered**, **Being returned**, **Lost** or **Canceled**. You need the **Cancel shipments** permission.

## Troubleshooting

<AccordionGroup>
  <Accordion title="“The courier account credentials are invalid.”">
    The carrier rejected the account's credentials. Test the account on **Shipments** > **Courier accounts** and
    replace the credentials if the test fails. For InPost, check that **Environment** matches the credentials:
    production credentials do not work in **Sandbox**.
  </Accordion>

  <Accordion title="“The shipment draft is invalid.”">
    Omnilinker or the carrier found the shipment data incomplete. Common causes:

    * An InPost locker service without a **Parcel locker / pickup point**.
    * A DPD or Apaczka shipment: these need a sender address that you cannot enter yet.
    * The carrier rejected the data, for example the recipient's address or phone number.

    Fix the order's delivery details, then create the shipment again.
  </Accordion>

  <Accordion title="“Shipment creation failed for provider …”">
    The carrier returned an error. The message ends with the carrier's reason. Correct the data it names, then try
    again. If the reason is `NoOffersAvailable`, InPost offered no service for this parcel; check the service, the
    parcel and the locker code.
  </Accordion>

  <Accordion title="“Failed to load the courier's service list. Try selecting the account again.”">
    Omnilinker could not get the services from the carrier. Select the account again, and test it on the **Courier
    accounts** page.
  </Accordion>

  <Accordion title="The label never arrives">
    The dialog keeps "waiting for the courier to confirm the label", and the **Label** column shows **Label pending**.
    Omnilinker retries in the background for a while; check the shipment on the **Shipments** list later. To have
    the label printed as soon as it comes, click **Print when it arrives** in the shipment details. If the carrier
    cancelled the shipment before confirming the label, no label will come. "The shipment label is not ready yet."
    means the label has not been fetched yet.
  </Accordion>

  <Accordion title="“Provider … does not support cancellation.”">
    The carrier does not accept cancellations from Omnilinker, or rejected this one. Cancel the shipment in the
    carrier's panel.
  </Accordion>

  <Accordion title="The status does not change">
    Tracking updates every 20 minutes. DPD shipments, external shipments, shipments older than 60 days and shipments of
    a deleted courier account are not tracked; see [Tracking](#tracking).
  </Accordion>

  <Accordion title="“A courier account named … already exists for provider …”">
    Each account of a carrier needs its own name. Choose a different **Name**.
  </Accordion>
</AccordionGroup>

## Permissions

| Action                                                        | Permission                                                  |
| ------------------------------------------------------------- | ----------------------------------------------------------- |
| See **Shipments**, the order's shipments and shipment details | **Shipping** > **Shipments**                                |
| Create a shipment through a courier                           | **Create shipments via courier**, plus **Courier accounts** |
| Add an external shipment and change its status                | **Add external (manual) shipments**                         |
| Download labels                                               | **Download shipment labels**                                |
| Print labels                                                  | **Download shipment labels**, plus **Printing** > **Print** |
| Cancel shipments                                              | **Cancel shipments**                                        |
| Change shipments on the order card                            | the permissions above, plus **Edit order**                  |

The courier account permissions are in [Courier accounts](/shipping/courier-accounts#permissions).
