In short and in plain language
Tradespeople write their quotes in their own software. Many of them order the material from a wholesaler.
IDS Connect is a fixed set of rules for this link. With it, the tradesperson opens the wholesaler's shop straight from the software.
In the shop, they search for items and see their own price. Then the basket goes back into the software.
No line may get lost on the way. The numbers of the tradesperson stay the same.
We build this link for shops that run on Shopware. Prices and stock come from the wholesaler's own system.
A heating installer is pricing a bathroom refit. The line items sit in the installer's trade software, the products sit with the wholesaler, and prices can change while the quote is still open. Retyping article numbers between the two worlds costs time and invites wrong orders. IDS Connect closes that gap: the interface links trade software with the wholesaler's online shop so that users can research articles and exchange baskets (ITEK). For wholesalers with their own shop this is not optional extra work, because trade customers who write their quotes in trade software want to reach their supplier's shop from there. This article explains how login, article search, basket return and the article deep link work technically, which fields must never be touched, how prices and orders flow back, and how we implement the standard in a Shopware shop.
Key takeaways
- IDS Connect links trade software and the wholesale shop for article search and basket exchange; version 2.5 is current and backward compatible with 2.0 and 2.3 (ITEK).
- The shop must display every line of a transferred basket, including items it does not stock, and return the tradesperson's line number of up to 35 characters unchanged (IDS interface specification).
- Login uses customer number, user name and password in a POST form. The standard still permits HTTP; we only accept encrypted calls, preferably over TLS 1.3 (BSI).
- The article deep link opens a shop page for a wholesale article number with current price and availability. After the automatic login, both must come from the ERP at customer level.
- If the shop reports the order back to the trade software, the business can check delivery and invoice against its own order number; in the e-invoice it belongs in field BT-13 (OpenPeppol).
- Shopware does not include IDS Connect out of the box. We build a plugin with an entry point, XML validation against the standard's schemas, return to the hook URL and an entry in the Connect directory.
What IDS Connect is and who maintains it
IDS stands for Integrierte Daten-Schnittstelle, an integrated data interface (ITEK). ITEK GmbH developed it for three associations: BVBS, the German federal association for software and digitalization in construction, DG Haustechnik as the association of building services wholesalers, and ZVSHK as the central association of the plumbing, heating and air conditioning trade. A working group of experts from these associations keeps developing the interface (ITEK). IDS Connect is therefore not one vendor's product but an industry standard that trade software and wholesale shops align with alike.
Technically, IDS Connect differs from classic web services. At its core, the specification names two functions: sending data and instructions from the tradesperson to the web shop, and receiving data and instructions from the web shop back to the tradesperson (IDS interface specification). In between, the wholesaler's shop acts as a black box in which the user moves freely. The communication is therefore considered semi-automatic: every action starts with the tradesperson, who sees the shop in a browser window, searches, swaps items and sends the result back. For the wholesaler this has an advantage that a pure data feed lacks. The shop stays visible with its design, range and pricing logic, because the standard is explicitly meant to respect the visual and content presentation of the wholesaler.
The current version is 2.5, which is backward compatible with versions 2.0 and 2.3 that are also in use in the market (ITEK). Version 2.3 added requests for login information and the interface version (ITEK), plus a target parameter for returning the basket and additional error codes. Version 2.5 made it possible to research articles from within the trade software (ITEK). The specification for version 2.5 is dated November 2, 2020 (IDS interface specification). The standard has been stable for years, which makes it predictable for wholesalers: whoever implements it today builds on a version the software vendors know.
Why wholesalers need the interface
The building services wholesale trade lives off the skilled trades. The 54 member companies of DG Haustechnik generate combined annual sales of around 20 billion euros (DG Haustechnik) and are close to around 50,000 trade customers through more than 1,900 branches (DG Haustechnik). On the other side, the German plumbing, heating and air conditioning trade counts about 48,000 businesses with 390,000 employees and sector sales of around 59.1 billion euros in 2025 (ZVSHK). Between them sits a range nobody can keep in their head: more than nine million articles are accessible, more than 40,000 of them held in stock per location on average (DG Haustechnik). How volumes like these get into a shop in the first place is covered in our article on bulk import via the sync API.
For the trade business, the need arises in one place: the trade software in which it writes quotes, orders and invoices. In a representative 2025 survey of 504 trade businesses with at least one employee, 68 percent said they send quotes digitally, and 62 percent send their invoices digitally (Bitkom). The same survey names high material costs as a challenge for 59 percent of businesses, and 75 percent report a shortage of skilled workers (Bitkom). Anyone pricing a quote under these conditions needs current purchase prices without detours and has no time to copy article numbers from one window into another.
The specification states the benefit for both sides in plain terms. For trade software, it matters that all wholesalers' web shops can be addressed in an identical way, and the wholesaler can exchange data with many customers using standard software (IDS interface specification). So that trade software can find a shop at all, there are the directory services SHK Connect and Open Connect. They list addresses and versions of the interfaces offered, and wholesalers should register their interfaces there (ITEK). A shop without IDS access and without a directory entry cannot be reached from trade software, even if it works well in the browser. How we support wholesalers across the entire integration is described on our page on ERP integration for wholesale.
The interface's actions at a glance
An action code in the parameter action determines which function the shop should run. The parameter definition of version 2.5 names seven such codes (IDS interface specification). Not every wholesale shop has to offer all of them: the range of functions can differ between wholesale systems, and the trade software can determine it with a query defined in the interface (IDS interface specification). The following table shows what lies behind the codes and which task falls to the shop in each case.
| Code | Action | Direction | Task of the shop |
|---|---|---|---|
| WKS | Send basket | Trade software to shop | Read the basket from the parameter warenkorb, validate it against the schema, display all lines |
| WKE | Receive basket | Shop to trade software | Open the shop, allow shopping, send the basket as a form to the hook URL |
| AS | Article search | Trade software to shop | Pass the search term from searchterm to the shop's own search, return the selected items |
| ADL | Article deep link | Trade software to shop | Show the article page for the wholesale number in ghnummer, with price and availability |
| LI | Login information | Query to the shop | Report in XML whether customer number, user name and password are required |
| SV | Interface version | Query to the shop | Report the supported versions in XML |
| HLS | Send heating label | Trade software to platform | Accept an item list for calculating an ErP label, aimed at calculation platforms rather than the basket |
For a wholesale shop, WKS, WKE, AS and ADL form the core. LI and SV are small responses, but they shape the first impression. The interface version query expects an XML list whose permitted values range from 1.3 to 2.5 (IDS interface specification). If the shop reports only the versions it actually supports, the trade software picks the right one. The HLS action hands an item list to a platform that calculates the ErP label of a heating package. Anyone selling heat generators needs that data well maintained anyway, as we describe in our article on energy labels and product data sheets from the ERP.
Login: into the shop without a second password
Every call starts with an automatic login. The trade software opens the shop in a browser window and transfers customer number, user name and password in the parameters kndnr, name_kunde and pw_kunde, each with up to 50 characters (IDS interface specification). These are the credentials the customer already uses in the shop. The transfer uses POST with the form type multipart/form-data; the standard does not support the GET variant because its parameter length is insufficient. The request also carries the hook URL, the trade software's return address, with up to 256 characters (IDS interface specification).
For the shop this means: it needs its own entry point that accepts POST requests from outside, checks the credentials against the customer account, opens a session and keeps the call parameters for the entire process. If the login fails, the shop shows the error in the browser window. If it allows a manual login, the parameters from the trade software must be preserved so that the process can still find its way back (IDS interface specification). For business customers with several employees in the shop, the mapping matters: customer number and user name must point to exactly the account whose prices, delivery addresses and approvals apply. How to secure access to interfaces in general is covered in our article on OAuth 2.0 and token security.
HTTP has no place in production
The basket there and back
The WKS action brings a basket from the trade software into the shop, for example the material list of a quote. The data arrives as XML in the parameter warenkorb and must conform to the schema Warenkorb_senden.xsd; only one basket can be sent per request. The data structure is modeled on the GAEB XML interface in version 3.1, extended by content that GAEB lacks (IDS interface specification). For the shop, three rules from the specification are decisive:
- No line may be swallowed. Items the wholesaler does not stock stay visible in the basket or trigger an error message, so the tradesperson notices what cannot be ordered.
- Line numbers are preserved. The tradesperson's line number of up to 35 characters must not be changed or deleted in the wholesale system (IDS interface specification).
- The link to documents remains. Through the wholesaler's quote number, a basket can refer to an existing quote or call-off order, provided it is still valid.
The specification recommends two further functions, and in daily work they make the difference. A swap function lets the user replace an unstocked or any other item with a different one while keeping the line number. And a clearly visible option to discard all changes prevents unwanted data from flowing back to the trade software (IDS interface specification). For wholesalers with framework agreements, the reference to the quote number is particularly valuable, as our article on blanket orders and call-offs shows.
The way back works the same for WKS and WKE. The shop sends the basket as a form to the hook URL, explicitly analogous to the OCI interface, and the XML must conform to the schema Warenkorb_empfangen.xsd (IDS interface specification). A return flag distinguishes a plain basket return from a return with order. The shop then updates the target that the trade software monitors, and the browser window is closed; if no target is given, TOP applies. Readers familiar with the mechanics from procurement systems will recognize the kinship in our article on OCI punchout. The difference lies in the counterpart: here trade software sits at the other end instead of a purchasing system.
Article search and the article deep link
Since version 2.5, trade software can call the search in the wholesale shop directly (ITEK). The search term sits in the parameter searchterm, several terms are separated by spaces, and the search runs on the receiving system's own logic, which the call does not influence (IDS interface specification). That sounds like a detail and is the opposite: whatever the shop search does not find, the tradesperson will not find from the software either. Manufacturer numbers, customer part numbers, synonyms from everyday site language and tolerance for typos help decide whether the search gets used. How third-party numbers get into the search index is described in our article on customer part numbers in the B2B shop. The selected items return to the hook URL the same way as with WKE.
The article deep link is the fastest action. The trade software passes the wholesale article number in the parameter ghnummer, and the shop responds with a page showing the article data (IDS interface specification). This function gives direct insight into current prices and the availability of articles (ITEK). This is exactly where it shows whether shop and ERP work together. After the automatic login, customers must see their purchase price, not the list price, and availability must reflect the stock of the warehouse that supplies them. How customer-specific prices reach the shop quickly and consistently is covered in our article on B2B price synchronization, and the basics of stock transfer on our page on inventory system integration.
Prices, quantities and surcharges in the record
What goes back in the basket is more than article number and quantity. The supplier's article number is a mandatory field of at most 15 characters, and quantity and unit of measure are mandatory as well (IDS interface specification). Wholesalers with longer internal numbers therefore need a mapping before the first basket leaves the house. The remaining line fields are optional, and since version 2.5 this also applies to price information in the transfer to the trade software (IDS interface specification). Whether a shop sends prices is therefore a decision to agree with trade customers and their software vendors. If it sends them, it should send them completely:
Offer price and net price
The offer price carries the gross or list price, the net price the customer's purchase price including discounts and raw material components, based on requested quantity and unit.
Price basis and unit of measure
The price basis states how many units the price refers to. The unit of measure comes from a fixed code list, such as PCE for piece or MTR for meter.
Surcharges and raw materials
Discounts are transferred as negative surcharges. For non-ferrous metals such as copper, a line can carry the raw material, its weight share and the DEL quotation used to calculate the net price.
Notes and errors per line
Important notes must be displayed to the user. Error code and error text explain why a line was not accepted; a separate flag marks miscellaneous items.
All of these fields come from the basket structure in the specification (IDS interface specification). Their values belong in the ERP, not in a second pricing logic in the shop: the ERP calculates raw material surcharges, tiers and special terms, and the shop displays and transfers them. For error codes, the standard defines only code 1 for a general error and leaves further codes open (IDS interface specification). We therefore agree a separate, documented list with the wholesaler, for example for blocked, discontinued or pack-only items. How packs and units are converted between ERP and shop is shown in our article on units of measure and pack sizes.
Report the order back, make the invoice checkable
When the tradesperson orders in the shop, the process does not end with the order confirmation. The specification states that for some trade software it is important that the order also comes back into the trade system. Anyone using order tracking and invoice checking based on it there needs the return without exception (IDS interface specification). For this purpose, the basket carries the order number from the trade software and the order confirmation number from the wholesale system, each with up to 15 characters (IDS interface specification). In the shop, the order is created like any other, handed over to the ERP and additionally reported to the hook URL with the flag for a return with order.
The circle closes at the latest with the invoice. For domestic business-to-business supplies from January 1, 2027, the transitional rule for invoices on paper or in another electronic format applies only if the issuing company's total turnover in the previous year did not exceed 800,000 euros (German VAT Act). Apart from that, only exchange via EDI remains exempt in 2027, and both transitional rules end on December 31, 2027. A wholesaler above that threshold that does not invoice via EDI therefore issues structured e-invoices to its trade customers, except in cases such as small-amount invoices. So that trade software can match an invoice to the order automatically, the tradesperson's order number belongs in the purchase order reference, which the Peppol specification carries under business term BT-13 as the identifier issued by the buyer (OpenPeppol). Whoever takes this number over cleanly in the IDS basket, writes it to the ERP and prints it on the invoice again turns the customer's invoice check into a match instead of a search. More on our e-invoicing page and in our article on whether the invoice comes from the shop or the ERP.
How we implement IDS Connect in Shopware
Shopware does not include IDS Connect out of the box. We therefore implement the interface as a dedicated plugin that fits into the existing shop and uses prices and stock levels from the existing ERP integration. The work is part of our API development and typically follows these steps:
From the first call to live operation
- 1
Entry point and login
A dedicated route accepts the POST from the trade software, checks customer number, user name and password against the customer account and keeps hook URL, target and version for the session.
- 2
Action switch
The action code decides whether a basket is read, the search is opened, an article page is shown or an XML response to LI or SV is delivered.
- 3
Reading the basket
The XML is validated against the schema, lines are matched to articles, and the tradesperson's line numbers move unchanged into the data of the basket line.
- 4
Building the return
The shop basket is turned into XML following the receiving schema, with prices from the ERP, units from the code list and error codes per line.
- 5
Form post to the hook URL
A return page sends the form to the return address, sets the return flag and closes the IDS session cleanly.
- 6
Testing and directory
Tests with the standard's sample baskets and a software vendor as partner, followed by registering the interface in the Connect directory.
Three points decide quality in operation. First, separate sessions: the specification warns that functions started in parallel in one shop can cause problems (IDS interface specification). We therefore give every IDS session its own basket, separate from the same customer's regular shopping. Second, testing: the standard comes with XML schemas and sample baskets for receiving and sending (ITEK), which allow changes to be checked automatically before they go live. How we build such test benches is described in our article on test environments for ERP interfaces.
Third, observation: every IDS call is logged with action code, customer, number of lines, duration and error codes, without passwords in the log. This shows us whether a trade software reports different versions after an update or whether lines fail on import, often before a customer gets in touch. The architecture behind it follows our middleware, which connects shop and ERP anyway, and we store the interface description so that a later service provider can understand it too.
How it differs from Datanorm, Open Masterdata and OCI
IDS Connect is often mentioned in the same breath as Datanorm and Open Masterdata, but it solves a different task. Datanorm and Open Masterdata supply the trade software with master data. Open Masterdata stands for on-demand supply of product master data and was developed to replace outdated master data processes based on Datanorm; the standard covers all Datanorm use cases, from initial setup to price updates for large numbers of articles (ITEK). IDS Connect, by contrast, takes the user into the shop and brings a basket back. The two complement each other: master data makes sure an article is known in the trade software, IDS Connect makes sure it is ordered at the current price. For procurement systems of industrial customers, OCI is the right route instead.
| Method | Purpose | Triggered by | Result |
|---|---|---|---|
| IDS Connect | Use the wholesaler's shop from trade software | Tradesperson, per transaction | Basket, search result or order in the trade software |
| Open Masterdata | Deliver product master data on demand | Trade software, for single articles or lists | Current article data and prices in the trade software |
| Datanorm | Hand over master data as a file | Wholesaler, as a file delivery | Article master for pricing calculations |
| OCI punchout | Use the shop from a procurement system | Buyer in the procurement system | Purchase requisition in the customer's approval process |
Checklist for the project start
- Define versions: implement version 2.5 and report via the SV query only what the shop really supports.
- Clarify accounts: which customer number and which user belong together, and which prices and delivery addresses apply to that account?
- Check number lengths: map wholesale article numbers to the standard's field format, pass the tradesperson's line numbers through unchanged.
- Define the price source: take net prices, surcharges and raw material components from the ERP, not from a second logic in the shop.
- Work encrypted only: reject calls over HTTP and keep passwords out of all logs.
- Win a test partner: involve a software vendor whose trade software the wholesaler's customers use.
- Maintain the directory: register address and version of the interface in the Connect directory and update them when they change.
- Pass the order number through: carry the tradesperson's number from the basket through the ERP into the e-invoice.
The shop is where the tradesperson works
Related Articles
Bulk Import from the ERP: Using the Shopware Sync API
Bulk import from the ERP into Shopware: the Sync API with upsert and delete, package sizes set by server limits, indexing via the message queue and delta sync.
Documenting Interfaces: OpenAPI Instead of Tribal Knowledge
Describe shop-ERP interfaces with OpenAPI: fields, error codes, examples and scopes, the description as a contract and the handover package for a switch.
DATEV Rechnungsdatenservice 2.0 ends: switch the data route
DATEV discontinues its Rechnungsdatenservice 2.0 on 31 Dec 2026. How shops and ERP connectors check whether they are affected and move their document route.