Skip to main content

Wholesale ordering integrations

Lupa connects to a number of veterinary wholesalers so a practice can pull live catalogues into the Supplier Catalogue, build a basket, and submit a real purchase order to the wholesaler, without leaving Lupa or re-typing the order into the wholesaler's portal. Where a wholesaler doesn't have a live API connection, you can still represent them as a Custom Supplier so prices, codes, and orders all live in one place. This article is about the **integration side, **which wholesalers connect, what each connection enables, and how to set up a connection. For the day-to-day flow of building a basket, placing an order, and receiving stock, see .

Connection types

Lupa supports three modes of supplier connection:

Mode

What it gives you

Integrated

Live API connection. Catalogue syncs automatically, orders go through Lupa straight to the wholesaler, and order/delivery status comes back into the Orders tab.

Manual (CSV)

No API. You upload a CSV price list to keep the catalogue current. You place orders inside Lupa for record-keeping and contact the wholesaler manually (email, phone, or their portal) to actually submit the order.

Custom

Branch or company-defined supplier with no catalogue. Useful for occasional suppliers and keeps contact details and notes in one place.

Supported integrated wholesalers

Wholesaler

Country

Credentials needed

Notes

NVS (National Veterinary Services)

UK

API Key

Live ordering, catalogue sync, and order tracking against your NVS account.

MWI Animal Health

UK

Account + Username + Password

Live ordering and catalogue sync.

Covetrus

UK

Account + Username + Password + Location

Live ordering. The Location field tells Covetrus which delivery point to ship to.

Heiland Marketplace

Germany

Password

Marketplace aggregator. Heiland brokers to many German manufacturers and suppliers, so a single connection covers a wide catalogue.

Cenvet

Australia

Password

Live ordering for Australian practices.

Don't see your wholesaler? Lupa also lists 100+ suppliers as manual entries (Agraria, Alfavet, Almapharm, CEVA, Dechra, Elanco, Virbac, Zoetis as a supplier, and many more, mostly German). For those you upload prices via CSV and order outside Lupa. If you want a new wholesaler added as a fully integrated connection, raise the request with Lupa support — we add new wholesaler APIs on demand.

Connect a wholesaler

Permissions. You need the Integration Settings permission to connect, edit, or remove suppliers. If the Suppliers tab is missing under Settings, ask a practice manager to grant the permission.

  1. Go to Settings → Suppliers.

  2. Under Connected Suppliers, click Add new supplier.

  3. In the Connect Supplier dialog, pick the wholesaler from the list. Lupa shows the right credential fields for that wholesaler.

  4. Enter the credentials supplied by the wholesaler. Depending on the wholesaler this is one of:

  5. API key (NVS)

  6. Username + Password (most manual suppliers)

  7. Account + Username + Password (MWI)

  8. Account + Username + Password + Location (Covetrus)

  9. Password only (Heiland, Cenvet)

  10. Optionally add a Note about the account (e.g. "Sales rep: Jane Smith — call ext. 4421").

  11. Click Save. Lupa validates the credentials with the wholesaler before saving. If the wholesaler rejects them, you'll see an error and the connection isn't created. Fix the credentials and try again. After save, the supplier appears in the Connected Suppliers list with an Enabled toggle. Disabling temporarily hides the supplier from the catalogue and basket without deleting the connection.

Add a custom supplier

For an ad-hoc supplier with no catalogue:

  1. Go to Settings → Suppliers → scroll to Custom Suppliers.

  2. Click Add Supplier.

  3. Fill in the name, website, order email, phone, and any notes.

  4. Click Save. Custom suppliers are managed at company level, so they appear at every branch. Branch-level users can see and order against them but not edit the master record.

Add a product to a custom supplier

Because custom suppliers have no live catalogue, you can create individual products against them directly from a product record.

  1. Open or create a product in Inventory.

  2. In the supplier section of the product form, select your custom supplier.

  3. Click Add Custom Supplier Product (this button only appears when a custom supplier is selected).

  4. In the pop-up, fill in:

  5. Item Code — the supplier's reference for this product

  6. Description — the product name as the supplier lists it

  7. Pack Size — e.g. 10 × 5 ml

  8. Cost — must be greater than 0

  9. Click Add.

Lupa saves the product to the custom supplier's catalogue and immediately populates the product form with the item code, description, and cost you entered. If you try to add a product with an item code that already exists for that supplier, Lupa will show an error — update the existing product instead.

Upload prices via CSV

For manual suppliers that don't have an API but do publish a price list, you can keep the catalogue current with a CSV upload.

  1. On the supplier's card, click Price Uploader.

  2. Click Generate CSV Template to download a starter file with the right columns.

  3. Fill in the CSV with the supplier's price list. Required columns:

  4. ItemCode

  5. Description

  6. PackSize

  7. Cost

  8. Save the file as CSV. Make sure the first row is the column headers (in English) and price values are numeric.

  9. Back in Lupa, click Upload & Sync Products and pick the file. Lupa shows a Processing Complete confirmation when the rows have been ingested and the new prices are immediately available in the catalogue.

How catalogue sync works for integrated wholesalers

For integrated wholesalers, Lupa pulls the catalogue from the wholesaler on a regular sync. Each product carries the wholesaler's product code, description, pack size, and current cost. When a product's price changes wholesaler-side, the new cost shows up at the next sync and there's nothing more for you to do. Some wholesalers (Heiland is the main example) keep different prices per customer account, so the catalogue Lupa stores is account-specific. Two branches connected with different Heiland accounts will see different prices, which is expected behavior.

What happens when you place an order

Once a connection is in place, the day-to-day flow is the same regardless of wholesaler:

  1. Go to Inventory → Supplier Catalogue and search for products.

  2. Click Add to Basket, choosing the supplier and quantity.

  3. Open Inventory → Basket to review the basket. Each supplier has its own basket. You can have a Covetrus basket and an MWI basket open at the same time without them merging.

  4. Click Place Order. Lupa submits the order to the wholesaler's API.

  5. The order appears in Inventory → Orders with the wholesaler's order code, the per-item accepted quantity, any wholesaler messages (e.g. "out of stock or substituted"), and a delivery status that updates as the wholesaler progresses the order. For manual / CSV suppliers, Place Order still creates an order record in Lupa for tracking, but you must contact the wholesaler separately (email, phone, or their portal) to actually submit it.

Troubleshooting

Issue

Likely cause

Fix

Connection fails immediately on save

Credentials are wrong, or the wholesaler's API is unreachable

Double-check each field with the wholesaler. Whitespace at the start or end of a username/account is a common culprit.

Catalogue is stale or missing products

The latest sync hasn't run, or the wholesaler hasn't published the product to the API yet

Wait for the next sync. If a specific product is sold elsewhere by the wholesaler but never shows up here, contact the wholesaler, as it's usually a missing flag on their side.

Order placed but quantity accepted is less than ordered

Wholesaler is short on stock. Lupa stores both the requested and accepted quantities; the difference is reflected on the order and on the matching stock receipt.

Check the wholesaler's message on the order line, as it usually says whether they're back-ordering or expecting you to re-order.

Heiland prices look different at another branch with the same supplier

Heiland prices are account-specific

Expected. Each branch sees the prices on its own Heiland account.

"You don't have permission to manage suppliers"

Missing Integration Settings permission

Ask a practice manager to grant it under Settings → Team & Roles.

An integrated wholesaler suddenly errors with auth failures

The wholesaler rotated the password / API key

Edit the connection from Settings → Suppliers, paste the new credentials, save.

FAQs

Can I run the same wholesaler at multiple branches?

Yes. Each branch holds its own credentials, so a multi-branch practice can plug each branch into its own NVS / MWI / Covetrus account. Custom Suppliers are shared across all branches via company-level settings.

Can I keep a wholesaler in Lupa if I don't have an API account with them?

Yes. That's what Custom Suppliers and the CSV upload modes are for. You won't get live ordering, but you can still track orders and prices in one place.

Why are some German suppliers listed but with no live ordering?

The German wholesale market has a lot of fragmentation, and most German suppliers don't expose an API. Lupa lists them so you can connect them as manual / CSV suppliers. Heiland Marketplace is the exception. It brokers to many German manufacturers from a single API connection, so connecting Heiland often covers most of what a German practice needs.

Does Lupa support EDI / VAN-based ordering?

No. The integrations are API or CSV only. If you need EDI exchange today, you'll have to keep that flow outside Lupa for the moment.

How do I add a wholesaler that isn't in the list?

Two options:

  • Short-term: add it as a Custom Supplier (no catalogue) and use a CSV upload if you have a price list.

  • Long-term: raise a request with Lupa support to integrate the wholesaler. New wholesaler APIs are added on demand.

What happens when an order is partially fulfilled?

Lupa stores both the requested and accepted quantities on each order line, and the wholesaler's message (e.g. "back-ordered, expected 3 days"). When the goods arrive, the stock receipt flow uses the accepted quantity by default. Adjust it if the actual delivery doesn't match.

Related articles

Did this answer your question?