> ## 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.

# Connect PeakWMS

> Set up Zippendo as the shipping label provider for your PeakWMS warehouse, step by step with screenshots — from the first click in Zippendo to the first label printed at the packing table.

When your warehouse runs [PeakWMS](https://peakwms.com), the packers never have to open Zippendo. They pack a parcel in PeakWMS, PeakWMS asks Zippendo for the shipping label, and the label comes out of the printer at the packing table. Zippendo books the carrier, keeps the tracking and shows the shipment under **Shipments** like any other.

This tutorial walks the Zippendo side of that setup with screenshots. The reference page [PeakWMS](/docs/integrations/peakwms) covers every PeakWMS field and what to do when something goes wrong.

<Info>
  Nothing is installed in PeakWMS. You create a connection in Zippendo, copy a key and a few web addresses into PeakWMS, and tell PeakWMS which shipping service each Host ID means. About twenty minutes, once.
</Info>

## Before you start

* You can edit settings in PeakWMS, and you know where its **Forwarders** live.
* Your webshop is connected to Zippendo and checkout already shows Zippendo shipping options. See [Connect order channels](/docs/tutorials/connect-order-channels).
* At least one [shipping rule](/docs/tutorials/shipping-rules) exists in Zippendo.

## 1. Open Warehouse Systems

In the sidebar, click **Warehouse Systems**. The **Available** tab lists the warehouse systems Zippendo can receive label requests from. PeakWMS is there with a **Connect** button and a link to the setup guide.

<Frame caption="Warehouse Systems, Available tab, with PeakWMS ready to connect">
  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/01-warehouse-systems-light.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=fda022f6c94193f0f42086d960be174b" alt="Warehouse Systems page showing the PeakWMS card with Connect and Setup guide buttons" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/01-warehouse-systems-light.png" />

  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/01-warehouse-systems-dark.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=b79058d2789a31f1699cb4a4566aef2e" alt="Warehouse Systems page showing the PeakWMS card with Connect and Setup guide buttons" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/01-warehouse-systems-dark.png" />
</Frame>

## 2. Create the connection

<Steps>
  <Step title="Click Connect on PeakWMS">
    A small dialog asks for a **Name** and an optional **Account ID**.
  </Step>

  <Step title="Name the connection after the warehouse">
    Something like "PeakWMS – Køge warehouse". If you run several warehouses, make one connection per warehouse and name each after its site, so the request log later tells you which one had a problem.
  </Step>

  <Step title="Account ID (optional)">
    If you plan to type an Account ID into PeakWMS, type the same value here. It is a safety net: when the two do not match, Zippendo refuses the request instead of printing a label with the wrong return address on it. You can leave it empty.

    <Frame caption="The Connect PeakWMS dialog">
      <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/02-connect-modal-light.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=85cf1e51c951ade24b8c46e0d3d8cb01" alt="Connect PeakWMS dialog with Name set to PeakWMS – Køge warehouse and Account ID NORDLYS-KOEGE" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/02-connect-modal-light.png" />

      <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/02-connect-modal-dark.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=825e5763f65fdb4cfea3b7e6a9c6ee32" alt="Connect PeakWMS dialog with Name set to PeakWMS – Køge warehouse and Account ID NORDLYS-KOEGE" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/02-connect-modal-dark.png" />
    </Frame>
  </Step>

  <Step title="Click Create connection">
    Zippendo opens the new connection's page.
  </Step>
</Steps>

## 3. Copy the key while it is on screen

The connection page shows the **API token** exactly once, right after you create the connection. Click **Copy token** now and paste it somewhere safe until you have put it into PeakWMS.

<Frame caption="The token is shown once, with a Copy token button">
  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/03-token-shown-once-light.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=2c95037cb734a3b9b9a38f9c35aa6711" alt="Credential card on the connection page revealing the API token once with a Copy token button" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/03-token-shown-once-light.png" />

  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/03-token-shown-once-dark.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=ce086d02721c0de271f7bd91635dead5" alt="Credential card on the connection page revealing the API token once with a Copy token button" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/03-token-shown-once-dark.png" />
</Frame>

<Warning>
  If you close the page without copying, the token cannot be shown again. Click **Rotate token** to get a new one. The old one stops working the moment you do, so PeakWMS needs the new token before packers can print again.
</Warning>

The token only lets PeakWMS create and read shipments. It cannot see your carrier accounts, addresses, orders or billing.

## 4. Copy the web addresses into PeakWMS

Below the credential, **Endpoint URLs** lists one web address per thing PeakWMS can ask Zippendo to do. Each has its own **Copy URL** button.

<Frame caption="Endpoint URLs with a copy button next to each address">
  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/04-endpoint-urls-light.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=2b337e77f4b3317d6a930037df3a105f" alt="Endpoint URLs card listing Create shipping label, Create return label, QR code label, Tracking, Existing shipment and Label used with copy buttons" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/04-endpoint-urls-light.png" />

  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/04-endpoint-urls-dark.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=6855c62903196f8868eb1b3a07910a2a" alt="Endpoint URLs card listing Create shipping label, Create return label, QR code label, Tracking, Existing shipment and Label used with copy buttons" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/04-endpoint-urls-dark.png" />
</Frame>

Now switch to PeakWMS. Everything in this step happens there, on a new forwarder:

<Steps>
  <Step title="Create a forwarder">
    In PeakWMS, add a new **Forwarder** and set **Provider** to **Generic**. If you cannot find the screen, PeakWMS's own [help centre](https://help.peakwms.com/support/solutions) walks through it; the setup is the same whichever shipping company you use.
  </Step>

  <Step title="Paste the web addresses">
    Copy each address from Zippendo into the PeakWMS field with the same name: **Create shipping label** (required), **Tracking** (recommended), and the optional ones you want, such as **Create return label**, **QR code label**, **Existing shipment** and **Label used**. Leave **Cancel shipment** empty; Zippendo shows no address for it on purpose, because it cannot cancel a label with the carrier.
  </Step>

  <Step title="Fill in the login fields">
    **API key** is the token you copied in step 3. **Auth scheme** is **Bearer**. **Account ID** is the value you typed in Zippendo in step 2, if you used one.
  </Step>
</Steps>

<Note>
  The full field-by-field table for the forwarder, including which fields are optional, is on the [PeakWMS](/docs/integrations/peakwms#2-put-them-into-peakwms) page.
</Note>

## 5. Set the Host ID on each shipping method in PeakWMS

In PeakWMS, every shipping method carries a **Host ID**. That is how PeakWMS tells Zippendo which carrier and service to use when a parcel is packed. You set it in PeakWMS, on the shipping method itself, not in Zippendo.

<Steps>
  <Step title="Find the code Zippendo already puts on your orders">
    When your webshop is connected to Zippendo, every order carries the shipping method the customer picked as a code that looks like `postnord:PNL13:rule_01HZX9K2QF`. Place a test order in your webshop, open it, and copy that code from the shipping method.
  </Step>

  <Step title="Paste it as the Host ID in PeakWMS">
    Open the matching shipping method in PeakWMS and paste the code into its **Host ID** field. Repeat for each shipping method your webshop offers. Zippendo recognises these codes on its own; there is nothing to configure in Zippendo for them.
  </Step>

  <Step title="Pickup points: paste only the part before the bar">
    When the customer chose a pickup point, the code on the order ends with a bar and the pickup point, like `postnord:PNL13:rule_01HZX9K2QF|1234567`. Paste only the part **before** the bar as the Host ID. PeakWMS splits the code there itself and passes the pickup point on to Zippendo, so one Host ID covers every pickup point.
  </Step>
</Steps>

<Warning>
  If a Host ID never matches, or the wrong carrier keeps being used, check whether your orders carry a field called `peak_shipping_code`, often left behind by a shipping app you used before. PeakWMS reads that field first and ignores the code Zippendo puts on the order. Whoever looks after your webshop can empty it.
</Warning>

### Using your own Host IDs instead

You only need anything in Zippendo when the Host ID is a code of your own making rather than the one from a webshop order. That is the case when orders are typed straight into PeakWMS, or when you prefer codes like `GLS_BUSINESS_PARCEL`. Then, in Zippendo, open the connection and add a **Host ID mapping**: your code on the left, the Zippendo shipping rule it should use on the right. Click **Save mappings** when the rows are complete; a row without a shipping rule cannot be saved.

<Frame caption="A Host ID mapping: GLS_BUSINESS_PARCEL points at the GLS home delivery rule">
  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/05-host-id-mapping-light.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=076f12fae3ada1c4609d259db028c238" alt="Host ID mappings card with a row mapping GLS_BUSINESS_PARCEL to the GLS Hjemmelevering – Danmark rule" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/05-host-id-mapping-light.png" />

  <img src="https://mintcdn.com/zippendo/c0lcxk96K6HlN35w/images/tutorials/connect-peakwms/05-host-id-mapping-dark.png?fit=max&auto=format&n=c0lcxk96K6HlN35w&q=85&s=667a6edb63b0f3adb5d34dc6b2e10853" alt="Host ID mappings card with a row mapping GLS_BUSINESS_PARCEL to the GLS Hjemmelevering – Danmark rule" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/05-host-id-mapping-dark.png" />
</Frame>

## 6. Stop importing orders from that store

PeakWMS now owns the orders. If Zippendo kept importing them too, both systems would create shipments for the same order, and you would pay for two labels. Open **Order channels**, open the store, and under **What Zippendo is used for** turn off **Import orders from this store**.

<Frame caption="Turn off order import on the store PeakWMS handles">
  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/07-import-orders-switch-light.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=b13c6facc3c03bebe00836a95a63cb0a" alt="Order channel settings with the What Zippendo is used for section and the Import orders from this store switch" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/07-import-orders-switch-light.png" />

  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/07-import-orders-switch-dark.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=167486c40fa16d96c931b5a6a49d7a28" alt="Order channel settings with the What Zippendo is used for section and the Import orders from this store switch" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/07-import-orders-switch-dark.png" />
</Frame>

Shipping prices and pickup-point selection at checkout keep working exactly as before. Only the order import stops, and Zippendo no longer marks orders as shipped in your webshop, since PeakWMS does that now.

## 7. Check it works

Pack one order in your PeakWMS test environment and look at three things: the label prints and shows the carrier you expected, the parcel appears under **Shipments** in Zippendo, and tracking shows up on the order in PeakWMS. Then swap the addresses in PeakWMS to your live setup.

Back on **Warehouse Systems**, the **Connected** tab shows every connection with when PeakWMS last asked for something, or the most recent failure in plain words.

<Frame caption="The Connected tab after the first requests">
  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/06-connected-light.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=4b5eeaf9f73cffd6f6ed4754bcdd54fc" alt="Warehouse Systems Connected tab with the PeakWMS – Køge warehouse connection card" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/06-connected-light.png" />

  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/06-connected-dark.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=da08cea86bcbc6fa6d490c5d893d6c60" alt="Warehouse Systems Connected tab with the PeakWMS – Køge warehouse connection card" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/06-connected-dark.png" />
</Frame>

## Pausing or removing the connection

Open the connection and turn off **Accept requests** to stop PeakWMS creating labels without deleting anything. Turn it back on when you are ready. **Delete connection** at the bottom removes the connection and its token for good. Shipments that were already created stay where they are.

<Frame caption="Accept requests is the switch for pausing a connection">
  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/08-accept-requests-light.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=6828503b43a91d8dcc46ba70044e49be" alt="Connection page with the Status card and the Accept requests switch turned on" className="block dark:hidden" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/08-accept-requests-light.png" />

  <img src="https://mintcdn.com/zippendo/s_kVQEnjftJdIy3V/images/tutorials/connect-peakwms/08-accept-requests-dark.png?fit=max&auto=format&n=s_kVQEnjftJdIy3V&q=85&s=6d03fd2bd85fef1a63eef90eb29ac67b" alt="Connection page with the Status card and the Accept requests switch turned on" className="hidden dark:block" width="2880" height="1800" data-path="images/tutorials/connect-peakwms/08-accept-requests-dark.png" />
</Frame>

## Good to know

* A packer who packs the same order twice does not get two labels. Zippendo hands back the label it already made.
* Return labels work the same way. Zippendo always prints your warehouse address from the shipping rule, so the label is right even if PeakWMS has a different address on file.
* Dangerous goods are refused rather than shipped without the required paperwork. Send those through a different setup in PeakWMS.

## Related

* [PeakWMS](/docs/integrations/peakwms) for every PeakWMS field, the Host ID rules and the error messages
* [Shipping rules](/docs/tutorials/shipping-rules) for the rules a Host ID points at
* [Order channel settings](/docs/how-to/order-channel-settings) for the store switches
