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

# Prices from your ERP

> Let Wapro set the prices of a price level, see where they land, and see when the ERP changes a level Omnilinker keeps.

A price level can be set by your ERP. Then the ERP's selling price replaces Omnilinker's for every product linked to
that ERP, the price becomes read-only in Catalog, and each new price Wapro holds arrives after the next read. This page
shows how to hand a level to Wapro, what lands and where you see it, and how to give the level back. It also covers the
opposite case: a level Omnilinker keeps, where a price changed in Wapro is only reported.

To send Omnilinker's prices to Wapro instead, see [Prices to your ERP](https://docs.omnilinker.pl/erp/prices-to-erp.md).

> [!WARNING]
>
> **Reading prices has to be switched on for your organization.** The feature **Read prices from the ERP** is off until
> Omnilinker switches it on, and the ERP option for a price level stays locked until then ("Reading prices from ‹ERP› is
> switched off for this account."). Ask Omnilinker to turn it on. See
> [Modules and feature availability](https://docs.omnilinker.pl/administration/features.md#options-and-limits).

## Before you start

* **Read prices from the ERP** is on for your organization (see above).
* The ERP price level is [mapped to the catalog price level](https://docs.omnilinker.pl/erp/reference-items.md#map-price-levels-and-warehouses), once:
  a level mapped twice cannot be handed over.
* The catalog price level has a **Currency**. Only prices in the level's currency come from the ERP, so declare it first
  (see [Price levels](https://docs.omnilinker.pl/catalog/price-levels.md)). Otherwise Omnilinker says "The price level ‹level› has no currency yet.
  Only prices in the level's currency come from the ERP, so declare its currency first."
* The agent has read the ERP's prices in full since the level was mapped. Mapping a level asks for a read at once, and
  the dialog says "Waiting for the first full read of prices from ‹ERP›. It usually arrives within minutes." Click
  **Read prices now** to ask again. The agent has to be the release that reads prices; see
  [Prices](https://docs.omnilinker.pl/erp/reference-items.md#prices).
* The ERP's price level still exists and is not ignored. Otherwise the option says "This price level no longer exists in
  ‹ERP›, or it was ignored. Map it again under ERP Integration → Connections → ‹ERP› → Mappings."
* You have the **Change who sets price levels** permission, under **Price levels**.

Only the products linked to the ERP's products get the ERP's prices. The others keep Omnilinker's prices, and you can
still edit them.

## Hand a level to your ERP

**1. Open the dialog**

On **Catalog** > **Price Levels**, open the level's **Actions** menu and click **Change owner**. You can also use
**Change owner** on the level's row on the connection's **Mappings** tab. The dialog **Who sets ‹level›** lists the
connections that can set the level. One that cannot yet shows the reason instead.

**2. Choose the connection**

Pick the connection. The dialog counts what will change before anything does, under **Prices** and
**Also changes**; see below.

**3. Confirm**

Click **Make ‹ERP› the owner**. The dialog **Handing the level over** shows the steps. The rest continues in the
background if you close it.

### What the dialog tells you

Under **Prices**, Omnilinker counts the linked products from the last full read of the ERP's prices ("‹ERP›'s prices
were last read in full 4 minutes ago."):

* "‹ERP›'s prices replace Omnilinker's for 120 linked products."
* "3 prices change:", with up to five examples as `SKU: 49.99 → 52.00`, and "117 prices are already the same."
* "2 products without a price at this level get one."
* "4 products keep Omnilinker's price: the ERP has no price for them."
* "1 price in another currency is skipped, never converted."
* "1 product has no sales VAT rate: its price can't be stored until it has one."
* "2 of the prices that land have a VAT rate other than the product's; they are stored as the ERP holds them."
* "1 price waits for a newer read: it was read before Omnilinker's latest send."

Under **Also changes**:

* "Products not linked to the ERP keep Omnilinker's prices, and you can still edit them."
* "2 repricer rules writing ‹level› skip the linked products."
* "1 marketplace setting that uses ‹level› sends the ERP's prices once they land."
* If the level is the recommended retail price: "‹level› is the recommended retail price: sales channels and everything
  that reads it get ‹ERP›'s prices."
* If the ERP calculates the level: "The ERP calculates this price level from another one and may recalculate these
  prices."
* "5 calculated bundle prices become fixed prices."
* "3 prices waiting for ‹ERP› will be withdrawn. This cannot be undone." The sends of this level that are still queued
  for the ERP (see [Prices to your ERP](https://docs.omnilinker.pl/erp/prices-to-erp.md)) are cancelled, because the ERP sets the level now. Their
  status becomes **Withdrawn**.

If Omnilinker cannot count right now it says "What changes couldn't be counted right now. Reload before handing the level
over."

### What happens after you confirm

The dialog **Handing the level over** shows, in this order:

1. "3 queued sends withdrawn", when there were any.
2. "‹ERP› sets ‹level› now": the owner is changed.
3. "Storing ‹ERP›'s prices", with a count such as "40 of 120". The prices already read are stored without another read.
4. "Done: the prices have landed." Or "Done: there are no prices to store yet." when the ERP has none for the linked
   products.

If a price could not be stored, the dialog says "2 prices from ‹ERP› could not be stored; they are tried again at the
next read." If it takes long, it says "The prices are still being stored in the background. You can close this window."

If a send to the ERP is being written right now, the change is refused: "A price for ‹level› is being written to the ERP
right now, so the ERP cannot take the level over yet. Try again when it has finished. The queued sends were left as they
are." If a send started while the others were being withdrawn, the message also says how many were withdrawn, and you
send them again if you still want them. If someone changed the level meanwhile (its owner, or a price sent from it),
Omnilinker says to reload and try again.

> [!NOTE]
>
> The only way to start is from the ERP's prices. Starting from Omnilinker's prices, which would send them to the ERP
> first, is not available yet.

## What lands

Each time the agent reports the ERP's prices, the new or changed ones are stored in Catalog:

* **Linked products only.** A price for a product not linked to an ERP product on this connection does not land
  (**Not linked**), and the product keeps the price it has.
* **Always a fixed price,** also for a bundle whose price followed its components. It is stored as the ERP holds it, net
  and gross, rounded to the currency's smallest unit (half away from zero). The VAT rate is the product's; when the ERP's
  pair implies another rate it is still stored as the ERP holds it, and counted in the preview.
* **In the level's currency only.** A price in another currency is not stored and never converted (**Other currency**).
  A level without a declared currency takes no price.
* **A product without a sales VAT rate** gets no price until it has one (**No VAT rate**).
* **A price that disappears from the ERP, and 0.00 / 0.00, keep Omnilinker's price.** Neither blanks or zeroes a price.
* **An older read never lands over a newer send.** If Omnilinker sent a price to the ERP after the read, the price waits
  for a newer read (**Waiting**).
* A price that is the same as Omnilinker's changes nothing: no history entry, no channel push.

Each change appears in the product's **Selling price history**, set by the connection rather than "the system". See
[Selling prices and their history](https://docs.omnilinker.pl/catalog/products.md#selling-prices-and-their-history).

## Where you see it

* **A product's prices.** The price at the level is read-only and says "Comes from ‹ERP› · read 4 minutes ago". Until its
  price has landed it says "Waiting for ‹ERP›'s prices". If it could not be stored: "‹ERP›'s price could not be stored;
  it is tried again at the next read". See [Prices you cannot edit](https://docs.omnilinker.pl/catalog/products.md#prices-you-cannot-edit).
* **The connection's Mappings tab.** The level's row reads "Received from ‹ERP›" with how long ago the prices were read,
  and a line of what landed, for example **Landed 118 · Not linked 4 · Other currency 1 · No VAT rate 1 · Waiting 2**.
  Counts that are zero are left out, and hovering over the line shows when the last price landed. **Not linked** opens the connection's unlinked products. **No prices
  received yet** means nothing has arrived. A level the ERP calculates also offers **Change owner**. See
  [Price levels: who sets them](https://docs.omnilinker.pl/erp/reference-items.md#price-levels-who-sets-them-and-where-their-prices-go).
* **Send to ERP.** For a level an ERP sets, the product's **ERP prices** dialog says **Received from ‹ERP›**, does not
  send it, and shows what the ERP holds ("In ‹ERP›: net 49.99 · gross 61.49", with when it was read).

> [!NOTE]
>
> **While reading prices is off for your organization, no read age is shown anywhere,** because nothing is read: the
> product page says "Comes from ‹ERP›" without a time, and the Mappings row says who sets the price without one.

## When a product or a level changes

* **A product is unlinked** from the ERP, or the ERP no longer lists it: the price keeps the last value the ERP sent, and
  you can edit it again.
* **A level is unmapped:** refused while the ERP sets it. Give the level back first.
* **A connection that sets a level cannot be deleted.** Give the level back first.
* **The connection is inactive:** it keeps setting the level, but nothing lands and the Mappings row says so. Activate
  it again, or change the owner.
* **Another ERP connection takes over** (from one connection to another): use the same dialog and pick the other
  connection. Only the sends queued to the new connection are withdrawn.

## Give the level back to Omnilinker

In the same dialog choose **Omnilinker · Catalog** and click **Make Omnilinker · Catalog the owner**. Landing stops at
once, the prices stay as the ERP last set them and become editable, and Send to ERP and repricer rules can write the
level again. Prices from ‹ERP› stop arriving; the ERP gets Omnilinker's price when someone uses **Send to ERP**
(automatically in a later ERP Sync version).

## A level Omnilinker keeps: changes made in the ERP

When Omnilinker sets a level and a price on the mapped ERP level is changed in Wapro, Omnilinker does not copy it. It
reports it:

* On the connection's **Mappings** tab and on **Catalog** > **Price Levels**, the level shows "Differs in ‹ERP›: 6 · found
  14:05". On the Mappings tab a link, **Change who sets prices**, opens the dialog above; on Price Levels use the row's
  **Change owner** action. The Mappings tab lists up to five of the changed prices as "Changed in the ERP (net / gross,
  before → after)".
* People with **Change who sets price levels**, or administrators when nobody has it, get one inbox notice per
  connection and level while the difference lasts: "Prices at ‹level› were changed in ‹ERP›", with "Omnilinker kept its
  prices. The Mappings tab shows how many differ and when the change was found." See
  [Prices changed in your ERP](https://docs.omnilinker.pl/notifications/inbox.md#prices-changed-in-your-erp).
* The notice clears by itself when the prices agree again, or when the level's owner or mapping changes.
* The reports are kept for 90 days.

A price Omnilinker itself sent to the ERP is not a change. Differences that were there before are only counted, as in
[Compare the ERP's prices with yours](https://docs.omnilinker.pl/erp/reference-items.md#compare-the-erps-prices-with-yours).

## Not available yet

* Starting a handover from Omnilinker's prices.
* Sending the prices of a level Omnilinker keeps to the ERP automatically; today you use
  [Send to ERP](https://docs.omnilinker.pl/erp/prices-to-erp.md).
* Bundles from the ERP and creating price levels automatically.

## Related pages

> **[Price levels](https://docs.omnilinker.pl/catalog/price-levels.md)**
>
> Who sets a level's prices.

> **[Lists and mappings](https://docs.omnilinker.pl/erp/reference-items.md)**
>
> Map price levels and compare the ERP's prices.

> **[Prices to your ERP](https://docs.omnilinker.pl/erp/prices-to-erp.md)**
>
> Write Omnilinker's prices into your ERP.

> **[Troubleshooting](https://docs.omnilinker.pl/erp/troubleshooting.md)**
>
> When a price does not land.


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