Help · Products & Assortment · Interfaces & Inventory Management

Interfaces & Inventory Management

Your store exchanges products, inventory, orders, and customer data with other programs: via the xoPort REST API, the older XML interface, pre-built integrations for JTL-Wawi, Billbee, and OpenXE, as well as your accounting software. This guide explains which method is best suited for each scenario, how to create and secure access points, how to protect your data from changes before the next synchronization, and how to resolve common errors.

At a Glance

  • New integrations run via the REST API. Each program gets its own access under Tools → xoPort OAuth2 Clients and can only do what you allow it to do.
  • Add-on modules: REST API, XML Interface, JTL Connector, Billbee (Sync), and Tricoma require the data interface to be enabled.XONIC Premium: xoPort Datenschnittstelle
  • Grant permissions sparingly: Anyone authorized to view customers or orders can see names, addresses, and email addresses. One access per program, limited to only the necessary areas.
  • Protect data maintenance: Import locks on items and the “xoPort: Product Import Settings” prevent the next synchronization from overwriting your text or prices.
  • CSV and Excel files are described in the Import & Export (CSV) guide.

In this guide

Not covered in this guide: CSV and Excel files using Porter ( Import & Export Guide (CSV)), Marketplaces ( eBay Integration and Kaufland Integration Guides), the product feed for Google ( Google Merchant Center & Product Feed Guide), and shipping providers such as DHL or GLS ( Shipping & Delivery Guide).


Which Method for What

Set up pre-built integrations in the settings. For your own programs, automations, and service providers, use the REST API.

MethodForLocation in the BackendSection
REST API (xoPort)New integrations, automations, service providers: Read and write articles, categories, customers, orders, manufacturers, and moreTools → xoPort OAuth2 ClientsREST API
XML Interface (xoPort)Existing inventory management integrations that exchange XML filesSettings → Interfaces → Inventory Management Systems/ERPs/Accounting → xoPort Data InterfaceXML Interface
CSV PorterFiles you edit yourself, price portals, simple reconciliations via linkTools → xoPort CSV Import/Export ManagerImport & Export Guide
JTL-WawiItems, prices, and inventory from JTL-Wawi; orders and customers to JTL-WawiSettings → Interfaces → Inventory Management/ERPs/Accounting → JTLJTL-Wawi
BillbeeSend orders to Billbee or import orders from BillbeeSettings → Interfaces → Inventory Management/ERPs/Accounting → BillBee, Tools → BillBee (Sync)Billbee
OpenXEItems, inventory, customers, and tracking numbers from OpenXE; orders as a fileSettings → Interfaces → Inventory Management/ERPs/Accounting → OpenXEOpenXE
DATEV Online, Lexware OfficeTransfer invoices to accountingSettings → Interfaces → Inventory Management/ERPs/Accounting → DATEV Online or → Lexware OfficeAccounting
n8n, Webhooks, SlackNotify other services when events occur, such as a new orderSettings → Interfaces → Artificial Intelligence → n8n, Settings → Interfaces → Chat Tools → SlackAutomation
Backend menu "Settings" expanded: Interfaces → Inventory Management/ERPs/Accounting, with the entries Afterbuy, Bechlem API, BillBee, BlueBerry, BuchhaltungsButler, DATEV Online, DEAR, Dreamrobot, EasyBill, JTL, Lexware Office, OpenXE, PromailAG CH, Promo ERP, TM3, Tricoma, xoPort Data Interface, and xoScan

You can find all integrations with inventory management and accounting systems under Settings → Interfaces → Inventory Management/ERPs/Accounting. Click to enlarge.

The add-on module for the data interfaceXONIC Premium: xoPort Datenschnittstelle

The REST API, the XML interface, the JTL connector, Billbee (Sync), and the Tricoma connection only work if the data interface is enabled. Without it, the REST API returns the error “ LICENSE_REQUIRED,” and Tools → xoPort OAuth2 Clients displays a red warning.

The store synchronizes its licenses with the XONIC license server. If this fails for 30 days, it disables the data interface and reports “was deactivated because no connection to the auth server could be established for 30 days.” Please contact us in this case.


REST API (xoPort)

The REST API is the gateway for new integrations. Each program logs in with its own credentials (OAuth2) and is only permitted to read or modify the areas you authorize.

Create an Account

  1. Open Tools → xoPort OAuth2 Clients and click “Create New Client.”
  2. Enter a “Client Name,” such as the name of the program or service provider.
  3. Under “Permissions,” select “Read,” “Write,” or “Delete” for each area. At least one permission is required.
  4. Optional: “Rate Limit (Requests/Hour)” and “Notes,” such as who is using the access.
  5. Click “Create New Client” to save. The store will display the “Client ID” and “Client Secret.” The secret appears only this one time: Copy it immediately into the program that needs to log in.
"Create New OAuth2 Client" dialog with the client name "Sample Store Price Analysis," Rate Limit 5000 and the note “Default and maximum value: 5000”; below that, the permissions are listed by category, each with Read, Write, and Delete options—only for “Products” is Read set to “Active”; at the bottom are the notes and the “Create New Client” button

An account for a price analysis tool only needs “Products: Read”; all other sections remain locked. Click to enlarge.

Select the appropriate permissions

Permissions are organized by section, such as Products, Categories, Customers, Orders, Manufacturers, Suppliers, Media, News, FAQs, CMS Pages, Contracts, Tickets, and Newsletters. They can be modified later via “Edit Permissions.”

IntegrationPermissions
Price Analysis, Price ComparisonProducts: Read
Merchandise Management synchronizes itemsProducts, Categories, Manufacturers: Read and Write
Fulfillment, Shipping ProvidersOrders: Read and Write
Newsletter or CRM toolCustomers or newsletter subscribers: Read
n8n workflowonly the fields that the workflow actually reads or writes

Only assign “Delete” if a program is actually supposed to remove records.

Address and Registration

The program uses the client ID and client secret to obtain an access token. The token is valid for one hour; after that, the program requests a new one. Your store’s token address is listed in the info box under Tools → xoPort OAuth2 Clients.

TaskMethod and Address
Get TokenPOST https://ihr-shop.example/xpanel/xoport/oauth/token
Read dataGET https://ihr-shop.example/xpanel/xoport/export/json/products
Read a data recordGET …/xpanel/xoport/export/json/product/42
Read a rangeGET …/xpanel/xoport/export/json/orders/1000:1100
Create newPOST …/xpanel/xoport/import/json/products
ModifyPUT …/xpanel/xoport/import/json/products
DeleteDELETE …/xpanel/xoport/delete/json/product/42
curl -X POST https://ihr-shop.example/xpanel/xoport/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=<CLIENT_ID>" \
  -d "client_secret=<CLIENT_SECRET>"

curl -H "Authorization: Bearer <TOKEN>" \
  https://ihr-shop.example/xpanel/xoport/export/json/products?limit=250&offset=0

Each address consists of /xpanel/xoport/, the task (export, import, or delete), the format json, and the area. If any other format is used, the API returns “Unknown route.” Deletion is only possible using the method DELETE.

Retrieving data page by page: Use ` ?limit= ` (default 50, maximum 250) and ` ?offset= ` to scroll through large datasets. The response reports the total count at ` stats ` and indicates whether more pages follow at ` has_more`.

Limits

  • Query limit: A new user may make 5,000 queries per hour. A higher value can only be set by XONIC after review. Anyone who exceeds the limit will receive 429 with RATE_LIMIT_EXCEEDED.from 4.9.17
  • Records per import: no more than the number allowed by Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort API: Bulk Import Limit, which is set to 50 by default.
  • Creation and modification are separate: POST creates only new records and returns the message “already exists. Use PUT to update.” if an existing item number is found. PUT modifies only existing records.

Under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort: Enable Settings for the Interface, you can enable individual shop settings for the API. If no entries are made, the API will not see any. Access data, license, and login settings always remain locked.from 4.9.54

For developers: All sections, fields, filters, and examples are available in the API documentation.

Securing the Interface

An account is only as powerful as its permissions. These measures keep the interface secure, even when service providers change.

One Access Per Program

Each program and each service provider receives its own client. If a partnership ends, select “Deactivate”: The client becomes invalid immediately, and all its tokens are revoked. “Permanently delete” removes it entirely.

Renew Secret

If a secret has been shared or someone who knew it leaves the team, select “Renew Secret.” The old secret is immediately invalidated. Enter the new one in the program.

Check Usage

“View Usage” displays requests, success rate, and response time; for each request, it shows the time, address, status, and IP address—along with the content, if desired. The shop stores the most recent 1,000 requests per client.

Usage statistics for the "Sample Store Price Analysis" client: Tiles: Last 24 hours 5, Last 7 days 6, Last 30 days 6, Average response time 116.3 ms, Active tokens 1, Success rate 83.3%, including filters and a list of requests with timestamp, endpoint, status (200 or 403), response time, number of records, and IP address 203.0.113.25

“View Usage” lists every request from a user; a 403 error indicates an access attempt outside the authorized areas. Click to enlarge.

Customer and order data are personal information. Users with “Customers: Read” or “Orders: Read” permissions can view names, addresses, email addresses, and phone numbers. Grant these permissions only to programs that need them to perform their tasks. The log under “View Usage” contains the transferred content. When deleting a client, you can remove it by selecting “Also delete this client’s access log.”

“Customers: Read” also provides shopping carts, viewed items, and order metrics for each customer.from 4.10

Restrict Access to Fixed IP Addresses

Under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort API: IP Restriction (JSON/REST), enter the addresses from which your programs originate. Then, every request must include both: one of these addresses and a valid token. If left blank, the REST API remains open to any access with a valid token.from 4.9.83

  • Enter only individual addresses, separated by commas. A range such as 203.0.113.0/24 will never match here and will block all programs.
  • If the shop is behind a proxy or Cloudflare, the address the shop sees applies. If it denies access, the response from IP_NOT_ALLOWED will list this address, and the dashboard will display “xoPort REST: Connection blocked.”
  • The list in the XML interface (“xoPort: IP Filter”) does not grant access to the REST API. The REST API always requires a token.from 4.9.83
SettingApplies toFormat
… → xoPort Data Interface → xoPort API: IP Restriction (JSON/REST)REST API, in addition to the tokenindividual addresses, comma
… → xoPort Data Interface → xoPort: IP FilterXML interface, instead of the keyindividual addresses, comma
Settings → General → Basic Settings → xoPort Customer and Order Directory IP FilterProtected Porter ExportsAddresses and ranges, comma

Enter only fixed addresses. If an address changes, remove the old one from the list immediately: The provider will reassign it, and its next owner would otherwise have access.


XML Interface

Older inventory management integrations place XML files in specific folders within the shop and then access an address from which they read the files. For new integrations, use the REST API.

Enabling and Access

The settings in this section are located under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface.

  • Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort: Enable Old XML Interface unlocks the URLs at /xpanel/xoport/. New stores start with false; existing ones retain true. On false, the addresses respond to every request with a 403 error, including those for the Tricoma connection.from 4.9.78
  • Proof: The inventory management system appends the key from “xoPort: AppKey Filter” as ?key= to the address, or it calls “xoPort: IP Filter” from an address. If your Internet address changes, the key is the more reliable method. Access the addresses only via https://.
  • Do not clear the “xoPort: AppKey Filter” while the XML order export is running: The export accesses your shop’s interface using this key.
  • “xoPort API: Authentication Required” remains displayed at true. At false, the XML interface responds to every request without verification, and the dashboard reports “xoPort data interface is unprotected.”
xoPort data interface settings list with 13 lines: old XML interface usable false, authentication required true, last exported order number 0, custom XSL template, share settings for the interface, IP filter and IP restriction (JSON/REST) empty, AppKey filter with hidden value, archiving period 14 days, email to new customers false, product and manufacturer import settings, bulk import limit 50

Under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface, you’ll find the interface’s access, filter, and import settings; new stores launch without the old XML interface. Click to enlarge.

Files and Addresses

The inventory management system places its files via FTP or SFTP in the folder xoport/xml/import/. The files are only imported when the corresponding address is called up. The filename must begin exactly as shown in the table—including uppercase and lowercase letters—and end with .xml, for example, Products_2026-10-04.xml.

File name begins withAddress that triggers the importEffect
Products/xpanel/xoport/import_products.phpCreate and modify items
Storage/xpanel/xoport/update_products.phpInventory, status, and product family of existing items, found via the item number
Categories/xpanel/xoport/import_categories.phpCategories
Manufacturers/xpanel/xoport/import_manufacturers.phpManufacturer
Customers/xpanel/xoport/import_customers.phpCustomers, found by the customer number in the inventory management system
Orders/xpanel/xoport/update_orders.phpStatus, comments, and shipment numbers for existing orders
ImportOrders/xpanel/xoport/import_orders.phpCreate orders from the inventory management system in the store
Gutschein/xpanel/xoport/import_vouchers.phpGift Certificates

The shop moves imported files to the subfolder archiv/. After “xoPort: Archiving time in days” (default 14), the product or order import deletes them from there.

It moves files that cannot be read to xoport/xml/import/error/ and specifies the line and reason in the response. It removes individual invalid control characters on its own and then imports the file.from 4.9.65

The Product XML

A product file contains one element per item: <product> under <products>. The store identifies the item via model, the item number. The most important elements:

ElementField in the Store
model“Item Number,” required
quantity“Product Quantity (In Stock)”
cost“Purchase Price (Net)”
evp“Manufacturer’s MSRP (net / gross),” as a net value
ean“GTIN”
products_eol"Clearance (EOL)"
categories/categoryCategory IDs, one per item
groups/group with id, price, and prices/pricePrice per customer group with tiered pricing
groups/customers/customer with id or external and priceCustomer price; external is the customer number in the merchandise management system
features/feature with name, value, quantity, price, model, eanattributes with values, inventory, and surcharges per value

The import transfers prices unchanged into the store’s price fields; these fields contain net prices. If a file provides attributes, the import replaces all of the item’s attributes with the provided ones.If it contains none, the existing ones remain.from 4.9.21

You can specify which fields and nodes the import actually processes under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort: Product Import Settings; see Import Restrictions. If your merchandise management system provides its own format, a shop-specific template (“xoPort: Custom XSL Template”) converts it into the shop’s format. This template is retained during updates.from 4.9.21

All elements—including those for categories, manufacturers, customers, and orders—are described in the API documentation.


Orders to the Inventory Management System (XML)

The XML interface makes new orders available as files. The inventory management system retrieves them and returns status updates and tracking numbers.

  1. The inventory management system or a cron job calls https://ihr-shop.example/xpanel/xoport/export_orders.php?key=<AppKey>.
  2. For each order with a number higher than “xoPort: last exported order number,” the store writes a file named order-<Bestellnummer>.xml to the folder xoport/xml/export/. It then sets the value to the last order whose file was successfully processed. A failed order is retried during the next run.
  3. The inventory management system retrieves the files via FTP or SFTP. The order files are locked via the web. It typically moves retrieved files to xoport/xml/export/archiv/.
  4. It returns the status, comment, and tracking numbers via a Orders…xml; see Files and Addresses.

In the archive, the store deletes files after “xoPort: Archiving period in days.” The value “ 0 ” means: never delete. Since the files contain customer data,be sure to set a time limit.from 4.9.116

Status Change and Re-export

The file ` order-<Nr>.xml ` is generated once. If you subsequently change the status in the shop, the file does not change. The current status of an order is provided by ` /xpanel/xoport/export/xml/order/<Bestellnummer> ` using the same key.

If you want the export to include orders again, set “xoPort: last exported order number” to the number before the first desired order. The next run will then regenerate all subsequent orders. The inventory management system must detect duplicates.

Three Address Blocks

Each order contains three addresses: customers_… for the customer, billing_… for the billing address, and delivery_… for the shipping address. Therefore, customers_firstname, billing_firstname, and delivery_firstname may differ. Payment details are located at payment_method, payment_class, and payment_module.

Confirmation with Status and Tracking Number

  • The store identifies the status by its name, using the German designation. If it does not recognize the reported name, it creates a new order status with that name. Therefore, be sure to use the exact German status names from the store in your inventory management system.
  • Whether the customer receives an email is determined by the “ customer_notified ” field in the file: “ 1 ” means “notify.”
  • If the inventory management system sends the same message a second time without any other status having been reported in between, the shop will discard it. If you intentionally report a status multiple times for partial deliveries, enter its ID under Settings → General → Basic Settings → xoPort Status Import: Statuses that trigger a notification even when repeated.from 4.9.66

Porter Exports, Links, and Feeds

The CSV Porter also delivers files via a link, for example, for price comparison sites or an inventory management system that retrieves CSV files. For instructions on how to create and protect such exports, see the Import & Export (CSV) guide.

Open or Protected

Exports for price portals can be accessed without a password as long as the Porter is enabled. Customer and order data are located in the protected area with a password and IP filter; see Protecting Exports.

Access Credentials in the Link

“Info and Links” places the username and password from Settings → General → Basic Settings → xoPort Protect Customer & Order Directory unchanged before the shop name: https://benutzer:passwort@ihr-shop.example/…. The password may contain # and %; in a URL, these characters break the link. Avoid using these characters in the password, or write %23 in the link for # and %25 for %.

Feed Files

In the “ xoport/xml/export/ ” folder, you’ll find order files as well as files such as pp_gmc_…xml, pp_gmc_local_…xml, and doofinder_…xml. These are the most recently generated product feeds for Google Merchant Center, local inventory, and Doofinder. The store regenerates them every time the feed is retrieved; see Feed Address.

Porter exports orders in two steps: one Porter for the order data and a second one for the line items. For information on how these two are related and how to re-export orders, see “Exporting Orders and Customers.”


JTL-Wawi

JTL-Wawi connects via your shop’s JTL Connector. It is located at https://ihr-shop.example/xoport/jtlconnector/ and requires the data interface to be enabled.

Setup

The settings are located under Settings → Interfaces → Inventory Management/ERPs/Accounting → JTL:

SettingEffect
“JTL Token”A random password that you enter in JTL-Wawi as the connection password. Without a token, the connector will not respond.
“Minimum Order Number”JTL-Wawi only imports orders starting from this number, for example, from the start of the connection.
“Transfer only customers with orders”true: only customers who have placed orders; false: all customer accounts
“JTL Root Category ID”Only necessary if JTL-Wawi uses its own root category; the shop will then display its subcategories at the top.
“JTL Weight Source”shipping: Shipping weight, product: Item weight from JTL-Wawi

What is synchronized

From JTL-Wawi to the store

  • Items with names, descriptions, meta data, item number, GTIN, weight, minimum quantity, and quantity-based pricing
  • Prices per customer group with tiers, special prices, purchase price, and MSRP
  • Inventory, inventory management, status, and sales
  • Variations as attributes, categories, manufacturers, images, and cross-selling
  • Order statuses “shipped” and “canceled”: The store sets the initial status via Settings → General → Module Options → Order Status to “shipped” or “canceled, ” without sending an email to the customer. Only the main administrator can view this group.

From the store to JTL-Wawi

  • Orders starting at the “minimum order number,” up to 100 per retrieval
  • Customer accounts; guest orders do not have an account
  • Payments for orders not paid via prepayment, direct debit, or invoice
  • Items, categories, and manufacturers not yet recognized by JTL-Wawi, such as during the first synchronization

The connector does not import tracking numbers or booked incoming payments from JTL-Wawi. You must then manage shipment tracking in the store; see Shipment Tracking. The JTL connector does not evaluate import restrictions on items.

Two stores: A connector is associated with exactly one store installation, with its own address and its own “JTL token.” Two stores therefore require two connections. However, multiple domains within a single installation share the same database and connector.


Billbee

For Billbee, there are two options, depending on who manages the orders.

Shop Connector: Billbee retrieves orders from the shop

  • In Billbee, create a shop connector with the address https://ihr-shop.example/ext/modules/billbee/hidden_trigger.php.
  • Enter the same password under Settings → Interfaces → Inventory Management/ERPs/Accounting → BillBee → BillBee API: Password. If the field is empty, the shop connector is disabled and the shop responds to requests witha 403error.from 4.9.131
  • “BillBee API: Order Import X Days Retroactively” determines how far back BillBee retrieves orders; by default, it retrieves orders from P3D for the past three days.
  • With “BillBee API: SetOrderState” on true, BillBee transfers status changes back to the shop.

Billbee (Sync): The store retrieves orders from Billbee

  • For orders created in BillBee, such as those on other sales channels. Requires the data interface to be enabled.
  • Fill out “Billbee Sync: Active” as well as “Billbee Sync: API Key,” “Billbee Sync: API User (Email),” and “Billbee Sync: API Password” in the same group. Only then will Tools → Billbee (Sync) appear.
  • There, you’ll find: “Test Connection,” “Retrieve Orders,” “Import Preview,” and “Import Orders.” The store maps items by product number first, then by GTIN. The page also displays the address for the cron job.from 4.9.130
  • “Billbee Sync: Run xo_stock_change” deducts stock during import, ex-factory. “Billbee Sync: Transfer Tracking” reports tracking numbers to Billbee and sets the order to “shipped” there.
  • The store sets orders canceled in Billbee to “Canceled” as long as they are still open. If an order has already progressed further, you’ll receive a note and a bulk email.from 4.9.127

OpenXE and Other Inventory Management Systems

For some inventory management systems, there are dedicated integrations with their own settings pages. We’d be happy to discuss with you which one is right for your business.

OpenXE

The page Settings → Interfaces → Inventory Management Systems/ERPs/Accounting → OpenXE connects the store via the “OpenXE API Path” and “OpenXE API Token.” Without both, it won’t import anything.from 4.9.106

  • “Data Import” tab: “Products, Inventory Levels, and Categories,” “Inventory Levels,” “Customers and Representatives,” and “Tracking Data.” Each run starts in the background and displays its progress below the line. You can close the page; the run will continue.
  • “Data Export” tab: Orders with the “Order Status for Export to ERP” set to “Export Orders” are saved as a file in the “Export File Directory.” Afterward, you’ll see the “Order Status After Export.” To export again, set an order back to the export status.
  • The category synchronization creates new categories and moves modified ones. It leaves the status, image, sorting, and “Category as Header Tab” of an existing categoryunchanged.from 4.9.135
  • If the page displays the message “Background processes are not possible on this server,” the server is missing the required PHP function. We’ll resolve this with your hosting provider.

Additional Integrations

IntegrationNote
Tricoma… → Inventory Management/ERPs/Accounting → Tricoma: User, Password, “Tricoma API: Order Status for Retrieval,” and “… after retrieval.” Requires the data interface and “xoPort: Old XML Interface Available” at true. To retrieve the data again, reset the order to the retrieval status.
SelectLineworks via the XML interface; custom templates are included for exporting.
Additional inventory management systems and servicesUnder Settings → Interfaces → Inventory Management Systems/ERPs/Accounting, you’ll find additional integrations. We’ll work with you to determine whether and how they fit with your system.

If your inventory management system is not listed, the REST API is usually the best option: Many programs and service providers access it via their own connection or a tool like n8n.


Accounting: DATEV Online and Lexware Office

Both integrations transfer orders as invoices to your accounting system: automatically after the order is completed or manually per order with the click of a button.

DATEV Online

  1. Create an app in the DATEV Developer Portal and note down the Client ID and Client Secret.
  2. Under Settings → Interfaces → Inventory Management/ERPs/Accounting → DATEV Online, enter the “DATEV Online Client ID,” “Client Secret,” “Consultant Number-Client” (format: 1234567-1), and “Environment”: sandbox for testing, production for production.
  3. The page displays the redirect URL for the DATEV app (click the “Copy” button). Then select “Connect” and log in to DATEV.
  4. “DATEV Online API Status” at true. With “Automatic Transfer at Checkout,” every new order is sent to DATEV immediately.

Any order that has not yet been transferred displays the “Transfer to DATEV Online” button—for example, for orders placed before the integration was set up. The transfer includes transaction data and the invoice PDF. Check the connection in the “Test Transfer” tab.

Lexware Office

  • Under Settings → Interfaces → Inventory Management/ERPs/Accounting → Lexware Office, enter the “Lexware Office API Key” and set the “Lexware Office API Status” to true.
  • “Automatic Transfer at Checkout” is set to “ true ” by default. Orders that have not yet been transferred display the “Transfer to Lexware Office” button. “Transfer to Lexware Office Again” generates a second invoice; you can then cancel the first one in Lexware Office.
  • The store creates the contact or finds it using the email address, imports an EU VAT ID, and generates the invoice. “Lexware Office Print Layout ID” selects the PDF layout.
  • For payment methods where the customer has already paid, a note replaces the payment terms: “Payment methods without payment terms on the invoice” and “Placement of the note on the invoice.” from 4.10

The guides “Statistics & Reports ” and “Processing Orders” describe how to export sales data as a CSV file and print invoices in batches.


Automation: n8n, Webhooks, and Slack

The store reports events to other services. These services then retrieve data via the REST API.

n8n

The Settings → Interfaces → Artificial Intelligence → n8n page has the tabs “Overview,” “Settings,” and “Events”:

  1. Enter the “n8n Instance URL,” “Instance Type” (n8n Cloud or self-hosted), and “n8n API Key,” then click “Test Connection.”
  2. Create a webhook node in n8n and enter its address as the “Webhook URL.” A “Webhook Secret” signs each message in the header X-Webhook-Signature so that n8n can recognize legitimate messages.
  3. Enable “Enable Webhooks” and, in the same “Settings” tab under “Event Configuration,” select the desired events, then click “Save.” By default, none are active. The “Events” tab then displays the status, an example payload, and the most recent webhook calls.
  4. “Send Test Event” checks the connection, and “Recent Webhook Calls” displays the results.
n8n page, Settings tab: In the Outbound Webhook section, set “Enable Webhooks” to Active, set the Webhook URL to https://n8n.example/webhook/musterladen, leave the Webhook Secret blank with “Generate New Secret” checked, and click the “Send Test Event” button; below that, the event configuration with “New Order” and “Order Status Changed” set to “Active,” and “New Customer,” “Inventory Changed,” “Newsletter Signup,” and “News Published” set to “Inactive”

You can configure the webhook URL, secret, and the events to be reported in the “Settings” tab on the n8n page and apply the changes by clicking “Save.” Click to enlarge.

Eventis reported when …
"New Order"an order is completed in the store
"Order Status Changed"the status is changed in the backend
“New Customer”a customer registers or is created in the backend
“Stock Level Changed”an order affects inventory
“Newsletter Sign-up”A subscriber confirms their subscription via double opt-in
“News Published”A news article is published or updated

The notification contains only a few details, such as the order number, total, and payment method, or—for new customers—the name and email address. The workflow retrieves additional data using its own access via the REST API; see REST API.

Webhook from a Marketing Event

The “Send Webhook (Generic / n8n / Zapier)” reaction sends customer or order data to an address of your choice, triggered by the conditions of an event. The “New Order to Webhook (n8n/Zapier)” template is a ready-to-use starting point; see Reactions.XONIC Premium: Marketing / Automatisierungen & Künstliche Intelligenz

Slack

Under Settings → Interfaces → Chat Tools → Slack, select “Enable Slack Notifications” and enter a webhook URL for each of the following: new orders, new tickets, and other notifications to send them to a Slack channel without needing a separate workflow.


Connecting a Fulfillment Service Provider

A service provider needs new orders and reports shipping status and tracking numbers back. There are three ways to do this.

REST API

A dedicated account with “Orders: Read” and “Write” permissions. The service provider retrieves new orders and reports the status, comments, customer notifications, and tracking number via PUT. It reports inventory levels using “Products: Write.”

XML Files

The service provider retrieves the order files and returns Orders…xml for status and tracking numbers, as well as Storage…xml for inventory levels; see Order Export.

Via Billbee

If the service provider uses Billbee, Billbee retrieves the orders via the Shop Connector and reports the status back; see Billbee.

The simplest option without programming: an order export via Porter and the import of tracking numbers via CSV; see Exporting Orders and Customers.


Protect Fields from Synchronization

If an ERP system syncs regularly, it overwrites the data it provides. With these settings, individual fields retain the values you’ve entered in the store.

On the product page: the data interface tab

When the data interface is active, each saved product has a tab with the name of the active interface, such as “xoPort Data Interface.” There, you specify which fields for this product may be overwritten during import. If a toggle is turned off, the import leaves the field unchanged. It always imports newly created items in their entirety.

GroupToggle for the XML product import
Texts“Update Name,” “Update Description”—selectable per language
Prices“Update Main Price,” “Update Tiered Prices,” “Update List Price,” “Update Discounts,” “Update Group Prices,” “Update Customer Prices,” “Update Special Prices”
Tax“Update Tax Class”
Miscellaneous“Update Bonus/Free”
"Sample Store Notebook" item screen, "xoPort Data Interface" tab with the note "Here you specify which fields for this item may be overwritten during import" and the groups Text, Prices, Tax, and Miscellaneous; "Update Main Price" is turned off; all other switches are turned on

A deselected checkbox prevents this item’s field—in this case, the main price—from being imported. Click to enlarge.

  • Forprice-regulated items such as books, lock them together using “Update Main Price” and “Update Tax Class.” Otherwise, a new tax class will change the gross price even if the net price is locked.from 4.9.26
  • The CSV Porter takes “Update Name” and “Update Description” into account; see “Protect Fields.”
  • The REST API can set the locks using the ` import_blocks ` field. However, it writes whatever it sends itself.
  • The JTL Connector does not evaluate the locks.

For all items: Product Import Settings

Under Settings → Interfaces → Inventory Management/ERPs/Accounting → xoPort Data Interface → xoPort: Product Import Settings, each field of the item is listed with its technical name, and each node of the file (node_…) has a Yes/No toggle. The XML product import does not include anything set to “No” for any product. It always reads the product number and ID.

  • If the merchandise management system provides a surcharge that you want to maintain in the shop, disable the corresponding field here—for example, shipping_surcharge.
  • The import only creates new items if “ node_categories ” and “ node_languages ” are enabled. They are enabled by default.

Categories

In the category screen, the “xoPort Data Interface” tab contains the buttons “Update Name,” “Update Description,” “Update SEO Fields,” and “Update Category Image.” These apply to the XML category import; when creating a new category, the system imports everything from the file.

The “xoPort Filter” field

The “xoport Filter” field is located on the “Miscellaneous” tab of the product. It does not protect anything, but rather assigns the item to exports: Enter one or more keywords, separated by semicolons. A porter with the same “Export Filter” will then export only items with that keyword, and product feeds can be used to limit or exclude items.


The Customer Number from the Inventory Management System

If your inventory management system uses its own customer numbers, this number is stored in the customer account. The store uses it for matching and on receipts.

  • Where: in the customer profile, “Customer Data” tab, “Individual Customer Number (External)” field, up to 64 characters. The XML interface and the REST API populate this field during customer import; the XML customer import uses this number to find accounts.
  • On receipts: With Settings → Checkout → Customer Details → Use external customer number as own customer number set to “ true ” (default), invoices and other receipts display this number instead of the customer ID. Whether the customer number appears on receipts at all is controlled by Settings → Design → Receipts → Customer Number. Guest orders do not include a customer number.
  • To change the assignment: Enter the new number in the customer account. When you save, the store checks to ensure no other account already has that number; otherwise, it displays the message “The customer … already has this customer number!” Receipts retrieve the number from the account when they are generated, so a newly created receipt will show the updated number.

For more information on customer IDs and unique numbers, see the “Managing Customers” guide.


Categories Reactivated After Category Synchronization

If you deactivate a category in the store and it becomes visible again after the next synchronization, the inventory management system determines its status.

IntegrationBehaviorWorkaround
JTL-WawiEach category synchronization imports the active/inactive status and sorting from JTL-Wawi.Deactivate the category in JTL-Wawi
XML Category ImportImports the status, sort order, “Category as Header Tab,” sitemap entry, and image from the file. If a value is missing, it sets the default value: active, sort order 0, no header tab, not in the sitemap, no image. If the short description, description, or SEO text for the language is missing, it clears those fields as well.Include all values and texts in the file; lock the image using “Update Category Image.” There is no lock for status and texts.
OpenXEOlder versions reactivated every category on every run.Update: Starting with 4.9.135, the status and settings of existing categories are preserved. Re-enter any lost settings once.

Common Error Scenarios

Most issues are indicated by the interface’s response, a message in the dashboard, or a file that gets stuck.

ObservationCauseSolution
REST API responds LICENSE_REQUIREDData interface not activated or disabled due to a missing license matchReport to us
REST API returns a 401 responseToken is missing or has expired; client is deactivated or secret needs to be renewedRetrieve a new token; check the client and secret
REST API responds INSUFFICIENT_PERMISSIONSThe account lacks permission for this area“Edit Permissions”
REST API responds with " IP_NOT_ALLOWED," Dashboard "xoPort REST: Connection blocked"Address is missing from the IP restrictionEnter the address specified in the response
REST API responds with 429Request limit reachedBundle requests; reuse the token
New item via REST API is missingPUT Sent as POST, or the item number already existsNew items with POST, existing ones with PUT
XML file remains in the folderFile name starts differently (case-sensitive), does not end with .xml, is in the wrong folder, or no one is accessing the import addressCheck the name and folder for " xoport/xml/import/ "; call the address via a cron job
XML call returns a 403 error; dashboard shows “xoPort: Access Denied”Old XML interface is disabled, incorrect key, or new IP address for the inventory management system“xoPort: Old XML interface usable”—check AppKey and IP filter
Dashboard shows “xoPort interface is blocked”Neither IP filter nor AppKey has been configuredEnter one of the two
XML file ends up in error/File is unreadable, possibly due to incorrect character encodingSave the file as UTF-8; check the line from the response
XML import does not create any new itemsmodel Missing, or " node_categories " or " node_languages " are set to "No"; " Storage…xml " never creates new itemsCheck product import settings; use the product file
A value from the ERP system is not being receivedField is empty in the product import settings or there is an import lock on the itemCheck the switch
New, duplicate order statuses after confirmationThe ERP system reports a status name that the store does not recognizeStandardize status names; delete redundant statuses
Umlauts are incorrect in a CSV fileFile character setSee “Preparing the File”

After an update to the merchandise management system, the cause is usually due to changed file names, status names, fields, or a new web address. Check the dashboard messages, “View Usage” in the access log, and the interface response. If the issue remains unclear, please send us the timestamp and the response.


Frequently Asked Questions

Do I need a license for the xoPort API?

Yes. The REST API, XML interface, JTL Connector, Billbee (Sync), and Tricoma require the XONIC Premium add-on module: xoPort Data Interface. Without it, the REST API returns the response " LICENSE_REQUIRED"; see the overview.

Where can I find the store’s API key?

There is no single key for the REST API. For each program, you create an access point under Tools → xoPort OAuth2 Clients and receive a Client ID and Client Secret. The XML interface uses the key from “xoPort: AppKey Filter”; see REST API.

What address and login credentials do I use for the REST API?

Retrieve the token using ` POST /xpanel/xoport/oauth/token`. Use ` /xpanel/xoport/export/json/<Bereich> ` for read operations and ` /xpanel/xoport/import/json/<Bereich> ` for write operations, each with ` Authorization: Bearer <Token>`. All formats are listed under “Address and Login.”

How do I retrieve all products page by page via the API?

Start with ?limit=250&offset=0, then offset=250, and so on, until has_more returns false in the response. The API does not return more than 250 records per page.

Which fields can I write to via the API?

That depends on the section; the complete list is available in the API documentation. Google fields such as product category are additional fields: Send them in the ` extra_fields` field, using either the field name or field ID. If you try to use them as a separate product field, the API will ignore them and return a warning.

How do I access orders via the API?

Use an API key with “Orders: Read” via GET /xpanel/xoport/export/json/orders; for a single order, use /xpanel/xoport/export/json/order/<Bestellnummer>. An API key with “Orders: Write” via PUT returns the status, comment, and tracking number.

How do I protect the xoPort interface by IP address, and which formats are supported?

For the REST API, enter fixed addresses in “xoPort API: IP Restriction (JSON/REST)”; for the XML interface, enter them in “xoPort: IP Filter.” Both accept only single addresses, or multiple addresses separated by commas. Ranges such as 203.0.113.0/24 are only accepted by the IP filter for protected Porter exports; see IP Restriction.

How do I connect n8n to the store?

In both directions: The shop reports events to a webhook node in n8n, set up under Settings → Interfaces → Artificial Intelligence → n8n. n8n reads and writes data using its own access via the REST API; see Automation.

What should the XML import file be named?

It begins with the name of its type, such as Products, Storage, or Orders —exactly as spelled here—and ends with .xml. It is located in the folder xoport/xml/import/; see Files and Addresses.

Is the “quantity” field in the XML product import used for inventory?

Yes. An item’s “ quantity ” becomes the “Product Quantity (Inventory)” provided that “ products_quantity ” is enabled in the product import settings. Within features/feature, quantity represents the inventory level for the individual attribute value.

How do I transfer the MSRP, purchase price, and attributes via XML?

The MSRP is located at evp, and the purchase price at cost; both are net amounts. Attributes are listed by value at features/feature, with name for the attribute and value for the value, along with stock, markup, item number, and GTIN. If the file contains attributes, they will replace all previous attributes for the item.

How do I transfer group and customer prices via XML?

Group prices are listed at groups/group with the customer group ID, and customer prices at groups/customers/customer. A customer is assigned there via id or via external —the customer number from the inventory management system. Customer discounts are set by the REST API; see the API documentation.

Is the order XML automatically updated when the status changes?

No. The file is generated once during export. The current status of an order is available at /xpanel/xoport/export/xml/order/<Bestellnummer>; see Order Export.

How do I prepare an order for export again?

For XML export, set “xoPort: last exported order number” to the previous number; all subsequent orders will then be included again. For OpenXE and Tricoma, reset the order to the status required for export or retrieval. For the CSV Porter, see Exporting Orders and Customers.

Why do the first name fields differ in the order XML?

Each order has three addresses: customers_firstname for the customer, billing_firstname for the billing address, and delivery_firstname for the shipping address. If someone places an order on behalf of another person, these addresses will differ.

Can two stores be connected via a shared JTL connector?

No. Each online store installation has its own connector at /xoport/jtlconnector/ with its own “JTL token.” Two online stores require two separate connections. Multiple domains within a single installation share one connector; see JTL-Wawi.

What data does the JTL-Wawi connection synchronize?

JTL-Wawi provides product data including prices, inventory levels, attributes, images, categories, and manufacturers, as well as the statuses “shipped” and “canceled.” The store sends orders, customer accounts, and payments to JTL-Wawi. The connector does not transfer tracking numbers; see JTL-Wawi.

Can I connect a fulfillment service provider via API or through Billbee?

Yes, via the REST API using “Orders: Read” and “Write,” via XML files, or via the Billbee store connector. The “Fulfillment” section compares these methods.

How do I connect the store to DATEV?

Via DATEV Online: Create an app in the DATEV Developer Portal, enter your login credentials and consultant number/client ID under Settings → Interfaces → Inventory Management/ERPs/Accounting → DATEV Online, and select “Connect”; see Accounting.

How do I display the inventory management customer number instead of the shop ID on receipts?

Enter the number in the customer account under “Individual Customer Number (External)” and set “Use External Customer Number as Own Customer Number” to true. To change the assignment, edit the same field; see Customer Number.

Why do categories become active again after syncing with the ERP system?

Because the ERP system provides the status: JTL-Wawi inherits the Active/Inactive status from the ERP system, while the XML import sets categories without a status in the file to active. Deactivate the category in the ERP system; see Categories.

How does the xoPort toggle work for a product?

In the “xoPort Data Interface” tab, you specify which fields the import is allowed to overwrite for this item. The “xoPort Filter” field in the “Miscellaneous” tab, on the other hand, assigns the item to exports; see Import Restrictions.

Why does the synchronization overwrite a value that I maintain in the store?

Because the inventory management system provides the field. Change the value there, or exclude the field from the sync: for all items in the product import settings, for individual items with an import lock, or in the CSV Porter using skip.

Do API credentials change when the store goes live?

OAuth2 credentials, AppKey, and interface settings are stored in the store’s database and are migrated along with it. If the domain changes, enter the new store address in each program and check the IP lists. FTP and SFTP access credentials are not store settings; please contact us to determine whether they need to be updated.

How do I correctly enter access credentials in an export file?

As https://benutzer:passwort@ihr-shop.example/…, just as “Info and Links” displays it. If the password contains # or %, enter %23 or %25 there, respectively; otherwise, the address will fail—see Porter exports.

What are the feed files in the interface’s export folder for?

Files such as pp_gmc_…xml and doofinder_…xml in xoport/xml/export/ are the most recently generated product feeds for Google Merchant Center and Doofinder. The store regenerates them each time they are retrieved.

How do I get external data access, for example, for analysis?

Via the REST API using an access token with read-only permissions limited to what the analysis requires. Every access request is subject to the permissions, request limit, and log under “View Usage.” To export files for editing in Excel, use the CSV Porter.

Further Guides

We’ll integrate your inventory management system with yours

We’ll work with you to determine the best approach, set up data imports and synchronizations, and work with you to identify the cause if data isn’t being received.

Contact Support Now