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

> Connect Posti in Zippendo with your Client ID, Client secret and Logistics contract number, plus the optional Tracking API username and Tracking API password.

**Posti** sends parcels from Finland: to Posti parcel lockers and service points, home delivery, next-day Express, small parcels to the door, customer returns, and Priority and EMS parcels worldwide. The fields that every carrier shares are on [Carrier credentials](/docs/how-to/carrier-credentials).

<Info>
  You do not pick a sender address on this form. Add your addresses under the organization menu → **Manage** → **Addresses**. You choose the sender address on each shipment or in a [shipping rule](/docs/how-to/shipping-rule-fields). Posti ships from an address in Finland or Åland, and returns come back to an address in Finland.
</Info>

## Before you start

* A Posti business customer account with a **logistics contract number**, usually six digits.
* A user in [OmaPosti Pro](https://pro.posti.fi/) with the **API Manager** role, to sign in to the [Posti Developer Portal](https://developer.posti.com/). If you do not have the role, ask your organization's main OmaPosti Pro user to open **Users management → Users**, click **Edit** on your user, and tick **API Manager** under **Other services**.
* An application account in the Developer Portal, for the **Client ID** and **Client secret**. The steps are below.
* Optional, for tracking: a **Tracking API** service account from Posti customer service. You can send shipments without it.

You can connect Posti more than once, for example one connection per logistics contract. Give each one its own **Carrier name**. **Learn more** on the card opens Posti's page on its services for e-commerce.

## Get your Posti credentials

<Steps>
  <Step title="Sign in to the Developer Portal">
    Open [developer.posti.com](https://developer.posti.com/) and sign in with your OmaPosti Pro user.
  </Step>

  <Step title="Add an application account user">
    Open **Configure application accounts → Application account list** and click **Add new application account user**. Turn **Enabled** on and give it a name, for example `Zippendo`.
  </Step>

  <Step title="Select both API roles">
    Select **shippingapi** and **2026-04**. Without **2026-04**, you can send shipments, but the service point search and label-free returns do not work.
  </Step>

  <Step title="Assign your logistics contract number">
    Add the logistics contract number you will enter in Zippendo, then click **Save**.
  </Step>

  <Step title="Copy the Client ID and Client secret">
    The portal shows them once. Copy both. If you lose the secret, create new credentials in the portal and update the carrier in Zippendo.
  </Step>
</Steps>

For tracking, ask Posti customer service for a **Tracking API** service account for your contract. Posti sends you a username and a password.

## Connect Posti

<Steps>
  <Step title="Open All carriers">
    In the sidebar, click **Carriers**, then open the **All carriers** tab.
  </Step>

  <Step title="Find Posti">
    On the **Posti** card, click **Connect**.
  </Step>

  <Step title="Fill in the form">
    The **Connect carrier** window opens. **Carrier name** is already filled in with "Posti". Enter your **Client ID**, **Client secret** and **Logistics contract number**. **Tracking API username** and **Tracking API password** are under **Optional fields**.
  </Step>

  <Step title="Connect the carrier">
    Click **Connect**. You see "Carrier connected", and the carrier appears on the **My carriers** tab.
  </Step>
</Steps>

<Frame caption="The Posti card on All carriers">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zippendo/images/how-to/connect-posti/01-all-carriers-card-light.png" alt="All carriers with the Posti card and its Connect and Learn more buttons" className="block dark:hidden" />

  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zippendo/images/how-to/connect-posti/01-all-carriers-card-dark.png" alt="All carriers with the Posti card and its Connect and Learn more buttons" className="hidden dark:block" />
</Frame>

<Frame caption="Connect carrier for Posti - fill in Client ID, Client secret and Logistics contract number">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zippendo/images/how-to/connect-posti/02-connect-modal-light.png" alt="Connect carrier window for Posti with the required Client ID, Client secret and Logistics contract number fields and the optional tracking fields" className="block dark:hidden" />

  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zippendo/images/how-to/connect-posti/02-connect-modal-dark.png" alt="Connect carrier window for Posti with the required Client ID, Client secret and Logistics contract number fields and the optional tracking fields" className="hidden dark:block" />
</Frame>

## Fields on the form

**Client secret** and **Tracking API password** hide what you type.

| Field | Required | What to enter |
| - | - | - |
| **Carrier name** | Yes | The name you see on **My carriers** and when you pick a carrier on a shipment. It starts as **Posti**. |
| **Brand** | No | Shown only if your organization has [brands](/docs/how-to/create-a-brand). The form says: "Only this brand can use this carrier." Leave it empty to let every brand use it. |
| **Client ID** | Yes | The form says: "From Posti's Developer Portal (developer.posti.com): the Client ID of the application account user you add for Zippendo. Select both API roles, shippingapi and 2026-04." |
| **Client secret** | Yes | The form says: "The Client secret the Developer Portal shows once, together with the Client ID." |
| **Logistics contract number** | Yes | Digits only. The form says: "Your Posti logistics contract number, usually six digits starting with 6. Add it to the same application account user in the Developer Portal, or Posti refuses your shipments." |
| **Tracking API username** | No | Fill in both tracking fields or neither. The form says: "The Tracking API username Posti customer service gives you for your contract. Needed only to track your shipments." |
| **Tracking API password** | No | The form says: "The password Posti sends with the Tracking API username. Posti locks the account for an hour after five failed sign-in attempts." |

**Connect** does nothing until **Carrier name**, **Client ID**, **Client secret** and **Logistics contract number** have a value.

## Test the connection

Posti has no test system, so there is no **Test mode** checkbox. Every shipment you send is a real Posti shipment on your logistics contract. Posti states that a shipment is not invoiced unless it is physically shipped, so a test label you never hand over costs nothing.

To try the connection, send one shipment to your own address and check its label. Posti notifies the receiver, so put your own email address and phone number on a test shipment. Zippendo cannot cancel a Posti shipment, so contact Posti if you need one cancelled. See [Test mode](/docs/how-to/sandbox-mode).

## After you connect

The carrier appears on **My carriers** with a **Connected** badge. You choose the product on each shipment or in a shipping rule, not on this form. See [Carrier products and services](/docs/how-to/carrier-products-and-services). A product that is not on your Posti contract is refused when you send, with Posti's reason.

| Product | Delivers to | Max weight |
| - | - | - |
| **Postal Parcel (Postipaketti)** | A Posti parcel locker or service point in Finland, Åland, Estonia, Latvia or Lithuania. | 25 kg |
| **Home Parcel (Kotipaketti)** | The receiver's door, at a time Posti agrees with them. Finland, Åland and the Baltics. | 25 kg, 35 kg as Bulky |
| **Express Parcel (Express-paketti)** | Next-day delivery against a signature. Finland, Åland and the Baltics. | 25 kg, 35 kg as Bulky |
| **Small Parcel to Door (Pikkupaketti ovelle)** | The receiver's mailbox or door in Finland and Åland, up to 38 x 38 x 28 cm. | 4 kg |
| **Return (Palautus)** (return shipment) | Your customer drops a parcel at any Posti service point or parcel locker, for your address in Finland. | 25 kg, 35 kg as Bulky |
| **Priority Parcel** | Over 200 countries, to the door or a service point depending on the country. | 25 kg, 30 kg as Bulky |
| **EMS** | Over 200 countries, to the door against a signature. | 25 kg, 30 kg as Bulky |

Every product except **Return (Palautus)** needs the receiver's phone number, for Posti's notices. **Home Parcel (Kotipaketti)** and **Express Parcel (Express-paketti)** can carry several parcels in one shipment. The other products take one parcel per shipment.

### Services and extra details

Every product has two choices under **Extra details for the carrier**:

* **Label format**: PDF (the default) or ZPL for thermal printers.
* **Delivery instructions**: up to 120 characters printed on the label, for example a door code.

Labels are 10 x 15 cm. International products that have no label in that size print on an A5 page.

You choose services on the shipment or in a shipping rule. Each product lists the services Posti offers on it: **Arrival notice by SMS or email**, **Pre-notification before delivery**, **Fragile**, **Bulky (oversized parcel)**, **No outdoor parcel locker**, **Saturday delivery**, **Handed over in person (ID check)**, **Registered (handed over against signature)**, **Delivery without signature**, **Delivery time agreed by phone**, **Call before delivery**, **Fossil-free transport (allocated share)** and, on **Return (Palautus)** only, **Label-free return (sending code)**. Choose **Bulky (oversized parcel)** for a parcel over 25 kg or larger than the product's standard size.

### Postipaketti service points

**Postal Parcel (Postipaketti)** delivers to a service point. Choose the service point in the **Service point** section of the shipment before you send. The search needs the **2026-04** role on your application account. See [Pick a service point](/docs/how-to/pick-a-service-point) and [Service points](/docs/how-to/drop-point-and-service-points).

### Returns

**Return (Palautus)** brings a parcel from your customer to your address. It needs no service point, and your Posti contract must include customer returns.

With **Label-free return (sending code)**, your customer writes a code on the parcel instead of printing a label. The shipment shows the code as **Label-free code** under **Tracking information**. Send it to your customer. If Posti creates the return without a code, the shipment shows a warning. Send your customer the label instead.

### Customs

Shipments to a country outside the EU, and to or from Åland, the Canary Islands, Ceuta or Melilla, carry customs data from the order lines: description, tariff number (HS code), quantity, value and country of origin. Posti returns the customs declaration and the commercial invoice with the label, and they appear with the shipment's documents.

Add your EORI number under [Organization settings](/docs/how-to/organization-settings). When the receiver has an EORI number, enter it in **Receiver's EORI number** on the receiver. See [Customs and documents](/docs/how-to/customs-and-documents).

### Pickups and tracking

* Posti is not available under **Pickups**. Arrange collections with Posti directly. You cannot set a pickup window on a Posti shipment. See [Schedule a pickup](/docs/how-to/schedule-a-pickup) for the carriers that are.
* When **Tracking API username** and **Tracking API password** are filled in, Zippendo fetches tracking updates from Posti about once an hour. Without them no tracking events appear. Each shipment still has its tracking number and a **Tracking link** to posti.fi. If the tracking login is wrong, correct it on **Edit carrier** and click **Save**. See [Carrier tracking webhooks](/docs/how-to/tracking-webhooks).

## Change or remove the connection

To change it, open **Carriers** → **My carriers** and click **Edit carrier** on the card. The **Edit carrier** page has two sections:

* **General**: **Carrier name**, and **Brand** if your organization has brands.
* **Carrier settings**: **Client ID**, **Client secret**, **Logistics contract number**, **Tracking API username** and **Tracking API password**.

Click **Save**. You see "Carrier updated".

To remove it, click **Delete** on the same page, type the carrier name in capital letters, and click **Delete**. Shipping rules that use this carrier are deleted with it. Shipments you already sent keep their labels and tracking numbers.

## Common problems

| What you see | What to do |
| - | - |
| "Couldn't connect the carrier. Try again." | Check the required fields, then try again. |
| "You've reached your plan's limit. Upgrade your plan or remove something you no longer use." | Your plan's carrier limit is reached. See [Billing and usage](/docs/how-to/billing-and-usage). |
| "The carrier rejected your login details. Update the carrier credentials under Carriers." when you send | The **Client ID** or **Client secret** is wrong, or the application account does not have both API roles. Fix it in the Developer Portal or on **Edit carrier**. |
| "The carrier's settings are incomplete or not valid. Check them under Carriers." | **Logistics contract number** contains something other than digits. Fix it on **Edit carrier**. |
| "Posti couldn't create the shipment." | Posti refused the shipment, for example because the logistics contract number is not assigned to the application account. The shipment shows Posti's reason. Fix it and send again. |
| "Some options for this carrier product are missing or not valid. Check the shipment's services and options, then try again." | The receiver's phone number is missing, the shipment has too many parcels for the product, a parcel is too heavy or too large, or Posti does not offer a chosen service there. The shipment shows what is wrong. |
| "This product delivers to a service point. Select a service point before sending." | Choose a service point for **Postal Parcel (Postipaketti)** on the shipment. |
| "The selected carrier product does not ship between these countries. Choose a different product." | Choose a Posti product that covers the receiver's country. |
| "The customs declaration is incomplete. Each item needs a description, a quantity, and a declared value greater than zero." | An order line is missing a description, tariff number, quantity or value. Fill it in and send again. |
| "The carrier accepted the shipment but returned no label or QR code, and Zippendo can't request it again. Ask the carrier for it, and don't send the shipment again." | Contact Posti for the label. Do not send the shipment again. |
| "The connection to the carrier was lost before it answered. Zippendo has no confirmation that the shipment was created, so check with the carrier before sending again." | Check with Posti whether the shipment exists before you send it again. |
| No tracking events appear | Check that both tracking fields are filled in and correct. |
| "We can't reach the carriers right now. Try again in a moment." or "The carrier rejected this. Check the carrier's reason, correct the details and try again." | Wait a moment and send again, or fix what Posti's reason names. |

More help: [Carrier authentication failures](/docs/knowledge-base/carrier-authentication-failures).

## Related

* [Connect a carrier or integration](/docs/how-to/connect-index)
* [Carrier credentials](/docs/how-to/carrier-credentials)
* [Test mode](/docs/how-to/sandbox-mode)
* [Carrier products and services](/docs/how-to/carrier-products-and-services)
* [Pick a service point](/docs/how-to/pick-a-service-point)
* [Customs and documents](/docs/how-to/customs-and-documents)
* [Request a carrier integration](/docs/how-to/request-carrier-integration)
* [Carriers](/docs/tutorials/carriers)


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