Delivery in a store is three different things that are easy to confuse. The confusion is expensive: most «why is the branch list empty at checkout» questions come down to exactly this.
Three things to keep apart
- Carrier — the service: Nova Poshta, Meest, Ukrposhta. Connected as a separate plugin; provides branches, rates, waybills and tracking.
- Delivery method — what the buyer sees at checkout: «Nova Poshta — branch». Has its own price and free-shipping threshold.
- Pickup point — the specific branch or parcel locker the buyer picked.
One carrier gives you several delivery methods: branch, parcel locker, courier. Different rows with different prices — but a single adapter underneath.
Why checkout works even when the carrier is down
Checkout reads a local directory in your own store database, not the carrier API at the moment of purchase. The directory refreshes in the background once a day. So an outage at Nova Poshta or Meest does not block orders: the buyer still picks a branch and completes the purchase.
The carrier API is needed in two cases only: refreshing the directory and creating a waybill.
What each carrier can do today
| Service | Branches | Lockers | Courier | Rate quote | Waybill | Tracking |
|---|---|---|---|---|---|---|
| Nova Poshta | yes | yes | yes | yes | yes | yes |
| Meest | yes | yes | stage 2 | yes | stage 2 | yes |
| Ukrposhta | yes | yes | stage 2 | stage 2 | stage 2 | stage 2 |
Self-pickup works without a carrier at all: the buyer collects the order from your store, no pickup point to choose.
Why Meest has no waybill or courier delivery yet: creating a waybill is the only irreversible action in the whole chain. The document appears in the carrier account and gets billed, so it is enabled separately — with production credentials and a verified sample.
Delivery methods: where to configure them
Go to Sales → Delivery methods. Each row is a separate option at checkout.
| Field | What it does |
|---|---|
| Code | Technical identifier of the row. Do not change it once orders exist — it is stored in their snapshots. Not visible to buyers. |
| Carrier | Adapter code from an enabled plugin. This is what switches the directory on. Empty means no directory: the buyer types the address as free text. |
| Pickup mode | Which directory to show and which fields to open at checkout. |
| Rate | Your delivery price. 0 means free. |
| Free from | Free-shipping threshold. Empty or 0 means no threshold. |
| Order | Position in the list: a lower number sits higher. |
| Active | Show the method to buyers. The last active one cannot be switched off — the store would be left with no delivery at all. |
Pickup mode decides what the buyer sees
| Mode | What checkout shows |
|---|---|
| Branch | City + list of branches |
| Locker | City + list of parcel lockers |
| Address | City + address field for the courier |
| None | Nothing: self-pickup |
The price and the threshold are yours, not the carrier's. «Free from» is compared against the goods total after discount, so a discount can turn free shipping back into paid. If the carrier has rate quoting configured, the real rate may override your fixed price.
Nova Poshta — setup
- Get the API key: Nova Poshta account → Settings → Security.
- Paste it into the «Nova Poshta» plugin settings.
- Fill in the sender details — city, branch and phone. Without them no waybill can be created.
Two extra switches: show parcel lockers as a separate option, and hide branches that disappeared from the API but still exist in past orders.
Meest — setup
First things first: no contract is required for buyers to see Meest branches. The directory is loaded from a public source right after the plugin is installed. Credentials are needed only for rate quoting and waybills.
There are two ways to authenticate; either one is enough:
- Ready token — Meest account → Settings → API integrations → «Conclude a contract».
- Login and password — issued by your Meest account manager. The store exchanges them for a token itself and refreshes it every 24 hours.
You also need the contract ID — rate quoting does not work without it.
Ukrposhta — setup
Without a token the branch list will be empty, and that is not a bug. Unlike Meest, Ukrposhta publishes no public directory: the open dataset has not been updated for years, and the classifier refuses access without a token.
Common traps
- An empty list right after connecting Nova Poshta is normal. Cities arrive with the first background run, and a city's branches are pulled in when someone selects it for the first time: the first buyer «warms up» that city for everyone else. Meest has no such step — the public dump loads the whole directory at once.
- Carrier and pickup mode must agree. Pick Meest + locker in a city where Meest has no lockers and the buyer sees an empty list. That is not a store failure, just the absence of such points in the directory.
- Vanished branches are hidden, not deleted. Past orders reference them, and deleting would make order history unreadable.
About the keys
Enter keys and tokens only in the carrier's own account and in the plugin settings. The store never shows a stored secret back to you — that is why the field reads «Value saved». Leaving the field empty does not erase the stored value: to replace it, type a new one over it.