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.
| Method | For | Location in the Backend | Section |
|---|---|---|---|
| REST API (xoPort) | New integrations, automations, service providers: Read and write articles, categories, customers, orders, manufacturers, and more | Tools → xoPort OAuth2 Clients | REST API |
| XML Interface (xoPort) | Existing inventory management integrations that exchange XML files | Settings → Interfaces → Inventory Management Systems/ERPs/Accounting → xoPort Data Interface | XML Interface |
| CSV Porter | Files you edit yourself, price portals, simple reconciliations via link | Tools → xoPort CSV Import/Export Manager | Import & Export Guide |
| JTL-Wawi | Items, prices, and inventory from JTL-Wawi; orders and customers to JTL-Wawi | Settings → Interfaces → Inventory Management/ERPs/Accounting → JTL | JTL-Wawi |
| Billbee | Send orders to Billbee or import orders from Billbee | Settings → Interfaces → Inventory Management/ERPs/Accounting → BillBee, Tools → BillBee (Sync) | Billbee |
| OpenXE | Items, inventory, customers, and tracking numbers from OpenXE; orders as a file | Settings → Interfaces → Inventory Management/ERPs/Accounting → OpenXE | OpenXE |
| DATEV Online, Lexware Office | Transfer invoices to accounting | Settings → Interfaces → Inventory Management/ERPs/Accounting → DATEV Online or → Lexware Office | Accounting |
| n8n, Webhooks, Slack | Notify other services when events occur, such as a new order | Settings → Interfaces → Artificial Intelligence → n8n, Settings → Interfaces → Chat Tools → Slack | Automation |
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
- Open Tools → xoPort OAuth2 Clients and click “Create New Client.”
- Enter a “Client Name,” such as the name of the program or service provider.
- Under “Permissions,” select “Read,” “Write,” or “Delete” for each area. At least one permission is required.
- Optional: “Rate Limit (Requests/Hour)” and “Notes,” such as who is using the access.
- 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.
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.”
| Integration | Permissions |
|---|---|
| Price Analysis, Price Comparison | Products: Read |
| Merchandise Management synchronizes items | Products, Categories, Manufacturers: Read and Write |
| Fulfillment, Shipping Providers | Orders: Read and Write |
| Newsletter or CRM tool | Customers or newsletter subscribers: Read |
| n8n workflow | only 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.
| Task | Method and Address |
|---|---|
| Get Token | POST https://ihr-shop.example/xpanel/xoport/oauth/token |
| Read data | GET https://ihr-shop.example/xpanel/xoport/export/json/products |
| Read a data record | GET …/xpanel/xoport/export/json/product/42 |
| Read a range | GET …/xpanel/xoport/export/json/orders/1000:1100 |
| Create new | POST …/xpanel/xoport/import/json/products |
| Modify | PUT …/xpanel/xoport/import/json/products |
| Delete | DELETE …/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
429withRATE_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:
POSTcreates only new records and returns the message “already exists. Use PUT to update.” if an existing item number is found.PUTmodifies 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
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.
“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/24will 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_ALLOWEDwill 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
| Setting | Applies to | Format |
|---|---|---|
| … → xoPort Data Interface → xoPort API: IP Restriction (JSON/REST) | REST API, in addition to the token | individual addresses, comma |
| … → xoPort Data Interface → xoPort: IP Filter | XML interface, instead of the key | individual addresses, comma |
| Settings → General → Basic Settings → xoPort Customer and Order Directory IP Filter | Protected Porter Exports | Addresses 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 withfalse; existing ones retaintrue. Onfalse, 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 viahttps://. - 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. Atfalse, the XML interface responds to every request without verification, and the dashboard reports “xoPort data interface is unprotected.”
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 with | Address that triggers the import | Effect |
|---|---|---|
Products | /xpanel/xoport/import_products.php | Create and modify items |
Storage | /xpanel/xoport/update_products.php | Inventory, status, and product family of existing items, found via the item number |
Categories | /xpanel/xoport/import_categories.php | Categories |
Manufacturers | /xpanel/xoport/import_manufacturers.php | Manufacturer |
Customers | /xpanel/xoport/import_customers.php | Customers, found by the customer number in the inventory management system |
Orders | /xpanel/xoport/update_orders.php | Status, comments, and shipment numbers for existing orders |
ImportOrders | /xpanel/xoport/import_orders.php | Create orders from the inventory management system in the store |
Gutschein | /xpanel/xoport/import_vouchers.php | Gift 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:
| Element | Field 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/category | Category IDs, one per item |
groups/group with id, price, and prices/price | Price per customer group with tiered pricing |
groups/customers/customer with id or external and price | Customer price; external is the customer number in the merchandise management system |
features/feature with name, value, quantity, price, model, ean | attributes 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.
- The inventory management system or a cron job calls
https://ihr-shop.example/xpanel/xoport/export_orders.php?key=<AppKey>. - For each order with a number higher than “xoPort: last exported order number,” the store writes a file named
order-<Bestellnummer>.xmlto the folderxoport/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. - 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/. - 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:
| Setting | Effect |
|---|---|
| “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
P3Dfor 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
| Integration | Note |
|---|---|
| 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. |
| SelectLine | works via the XML interface; custom templates are included for exporting. |
| Additional inventory management systems and services | Under 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
- Create an app in the DATEV Developer Portal and note down the Client ID and Client Secret.
- 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”:sandboxfor testing,productionfor production. - The page displays the redirect URL for the DATEV app (click the “Copy” button). Then select “Connect” and log in to DATEV.
- “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”:
- Enter the “n8n Instance URL,” “Instance Type” (n8n Cloud or self-hosted), and “n8n API Key,” then click “Test Connection.”
- 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-Signatureso that n8n can recognize legitimate messages. - 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.
- “Send Test Event” checks the connection, and “Recent Webhook Calls” displays the results.
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.
| Event | is 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.
| Group | Toggle 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” |
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.
| Integration | Behavior | Workaround |
|---|---|---|
| JTL-Wawi | Each category synchronization imports the active/inactive status and sorting from JTL-Wawi. | Deactivate the category in JTL-Wawi |
| XML Category Import | Imports 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. |
| OpenXE | Older 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.
| Observation | Cause | Solution |
|---|---|---|
REST API responds LICENSE_REQUIRED | Data interface not activated or disabled due to a missing license match | Report to us |
| REST API returns a 401 response | Token is missing or has expired; client is deactivated or secret needs to be renewed | Retrieve a new token; check the client and secret |
REST API responds INSUFFICIENT_PERMISSIONS | The 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 restriction | Enter the address specified in the response |
| REST API responds with 429 | Request limit reached | Bundle requests; reuse the token |
| New item via REST API is missing | PUT Sent as POST, or the item number already exists | New items with POST, existing ones with PUT |
| XML file remains in the folder | File name starts differently (case-sensitive), does not end with .xml, is in the wrong folder, or no one is accessing the import address | Check 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 configured | Enter one of the two |
XML file ends up in error/ | File is unreadable, possibly due to incorrect character encoding | Save the file as UTF-8; check the line from the response |
| XML import does not create any new items | model Missing, or " node_categories " or " node_languages " are set to "No"; " Storage…xml " never creates new items | Check product import settings; use the product file |
| A value from the ERP system is not being received | Field is empty in the product import settings or there is an import lock on the item | Check the switch |
| New, duplicate order statuses after confirmation | The ERP system reports a status name that the store does not recognize | Standardize status names; delete redundant statuses |
| Umlauts are incorrect in a CSV file | File character set | See “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?
LICENSE_REQUIRED"; see the overview.Where can I find the store’s API key?
What address and login credentials do I use for the REST API?
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?
?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?
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?
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?
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?
What should the XML import file be named?
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?
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?
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?
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?
/xpanel/xoport/export/xml/order/<Bestellnummer>; see Order Export.How do I prepare an order for export again?
Why do the first name fields differ in the order XML?
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?
/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?
Can I connect a fulfillment service provider via API or through Billbee?
How do I connect the store to DATEV?
How do I display the inventory management customer number instead of the shop ID on receipts?
Why do categories become active again after syncing with the ERP system?
How does the xoPort toggle work for a product?
Why does the synchronization overwrite a value that I maintain in the store?
skip.Do API credentials change when the store goes live?
How do I correctly enter access credentials in an export file?
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?
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?
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