Not original USM Haller parts, but 100% compatible. We have no business relationship with USM Haller.

APIs & integrations

Our public interfaces for retailers, partners, developers and AI agents: calculate shipping costs, check stock, load product data, prepare shopping carts and evaluate configurations from the 3D configurator. All interfaces described here are free, read-only and require no sign-up.

General

  • Format: JSON (UTF-8); amounts as strings with a dot, e.g. "18.14", in EUR (unless stated otherwise).
  • Authentication: none. All endpoints described here are public and read-only.
  • Error 403? Our servers are behind Cloudflare. curl, Python requests and JavaScript fetch work without any further settings; some libraries (e.g. Python urllib) are rejected. In that case, send your own User-Agent, e.g. MeineFirma-Integration/1.0 (kontakt@example.com).
  • Calling from the browser (CORS): the stock API and the product feeds can be called from any website. The shipping API is intended for server-to-server calls – call it from your backend.
  • Limits: shipping costs for configurations: 60 requests per minute and IP address (then 429). Please do not request data more often than necessary and cache results briefly (e.g. stock for 5–10 minutes).
  • Errors: HTTP status codes (400 invalid input, 404 not found, 422 missing or invalid parameters, 429 too many requests). The message is in the detail or error field.
  • For AI agents: a compact overview for language models is available at /llms.txt and /agents.md.

Shipping API

Base URL: https://modula24.com

Calculates shipping costs exactly like our cart and checkout – for a cart, for weights or for a configuration from the 3D configurator. Goods from our Hamburg warehouse ship with DHL (parcels up to 31.5 kg); goods only stocked in our China warehouse ship by sea or air freight. If only part is in Hamburg, a split shipment is offered. The API determines which items are where from the current stock.

Shipping methods (id): dhl (from Hamburg: DHL Paket International Premium, door delivery; within Germany DHL parcel), dhl_eco (from Hamburg: DHL Paket International Economy, delivery to a parcel locker/post office – only outside the EU and not in all countries), sea / air (China-only goods), split_sea / split_air (split shipment: Hamburg by DHL Premium, the rest from China), sea_door (outside the EU only: whole order from the China warehouse by sea to the door, customs cleared, 9–11 weeks – always listed last). The tariff is also given in legs[].product. Each option contains cost, the delivery time days with unit (days = working days, weeks) and the individual parts of the shipment legs. The cheapest option comes first (except sea_door).

GET /api/checkout/config

Delivery countries – List of delivery countries (ISO 3166 codes) and currencies. We only deliver to these countries.

curl https://modula24.com/api/checkout/config
Response (shortened)
{
  "currencies": ["EUR", "USD"],
  "countries": ["AT", "AU", "BE", "BG", "CA", "CH", "CY", "CZ", "DE", "DK", "…"]
}

POST /api/checkout/shipping

Shipping costs for items – Shipping options for a cart. The variant IDs (variant_id) are in the product feed.

Parameters
NameInTypeDescription
countryrequired body (JSON) string Delivery country, ISO code (e.g. DE, AT)
itemsrequired body (JSON) array Items: [{"id": "<variant_id>", "qty": 2}], max. 100 lines
currencyoptional body (JSON) string EUR (default) or USD
curl -X POST https://modula24.com/api/checkout/shipping \
  -H "Content-Type: application/json" \
  -d '{"country": "AT", "items": [{"id": "58436497375496", "qty": 8}, {"id": "58546503745800", "qty": 8}]}'
Response (shortened)
{
  "country": "AT", "currency": "EUR", "kg_hamburg": 1.8, "kg_china": 0.0,
  "shipping_options": [
    {"id": "dhl", "cost": "18.43", "days": "3–6", "unit": "days",
     "legs": [{"from": "hamburg", "kg": 1.8, "cost": "18.43", "product": "DHL Paket International Premium", "days": "3–6", "unit": "days", "packages": 1}]}
  ]
}

POST /api/checkout/shipping

Shipping costs for weights – Without items, directly with weights per warehouse – e.g. for your own calculations.

Parameters
NameInTypeDescription
countryrequired body (JSON) string Delivery country, ISO code
kg_hamburgoptional body (JSON) number Weight from the Hamburg warehouse in kg (0–5000)
kg_chinaoptional body (JSON) number Weight from the China warehouse in kg (0–5000)
currencyoptional body (JSON) string EUR or USD
curl -X POST https://modula24.com/api/checkout/shipping \
  -H "Content-Type: application/json" \
  -d '{"country": "DE", "kg_hamburg": 12.5, "kg_china": 4}'
Response (shortened)
{
  "country": "DE", "currency": "EUR", "kg_hamburg": 12.5, "kg_china": 4.0,
  "shipping_options": [
    {"id": "split_sea", "cost": "19.32", "days": "9–10", "unit": "weeks",
     "legs": [{"from": "hamburg", "kg": 12.5, "cost": "14.92", "product": "DHL Paket", "days": "1–2", "unit": "days", "packages": 1},
              {"from": "china", "kg": 4.0, "cost": "4.40", "product": "Seefracht", "days": "9–10", "unit": "weeks"}]},
    {"id": "split_air", "cost": "42.92", "days": "5–10", "unit": "days", "legs": ["…"]}
  ]
}

GET /api/checkout/shipping?config={id}

Shipping costs for a configuration – For a saved configuration from the 3D configurator: the parts list is converted into shop items as with the “Add to cart” button. Without country, you get the options for all delivery countries (countries). Parts without an available shop item are listed in missing – their weight is not included and complete is false. Also available as POST with {"config": "…"} or a parts list {"bom": […]}. Max. 60 requests per minute.

Parameters
NameInTypeDescription
configrequired query string Configuration ID (e.g. LFKDD5KLP9MG)
countryoptional query string Delivery country; empty = all countries
currencyoptional query string EUR or USD
curl "https://modula24.com/api/checkout/shipping?config=LFKDD5KLP9MG&country=AT"
Response (shortened)
{
  "config": "LFKDD5KLP9MG", "country": "AT", "currency": "EUR",
  "complete": false,
  "missing": [{"text": "Tablar Metall 500x350 RAL 6003", "qty": 2, "reason": "derzeit nicht lieferbar"}, "…"],
  "items": [{"id": "58436497080584", "qty": 4, "title": "Rohr ohne Bohrung … – 100", "stock_sku": "rohr_100"}, "…"],
  "subtotal": "693.79", "weight_kg": 19.522, "kg_hamburg": 19.522, "kg_china": 0.0,
  "cart_url": "https://modula24.com/cart?add=58436497080584:4,…&cfg=LFKDD5KLP9MG",
  "shipping_options": [{"id": "dhl", "cost": "39.62", "days": "3–6", "unit": "days", "legs": ["…"]}]
}

Stock API

Base URL: https://api.modula24.com

Current stock of our warehouses in Hamburg (hamburg) and China (china) per stock SKU. Ideal for retailers, price comparison and ERP systems. The data is updated continuously (sales across all channels are booked every 10 minutes); the data_updated_at field shows the latest change. Can also be called directly from the browser (CORS).

Fields per item: sku, warehouse, title, price + currency, available (available quantity), ean, url (product page on modula24.com, German), urls (product page per language: de, en, fr, it), updated_at. If an item is not offered on modula24.com, url and urls are null.

GET /stock

Query stock – All items or filtered. Filters can be combined.

Parameters
NameInTypeDescription
warehouseoptional query string hamburg or china; empty = all warehouses
skusoptional query string Comma-separated SKUs, e.g. kugel,rohr_350
qoptional query string Free-text search in SKU, title and EAN
eanoptional query string Exact EAN
in_stockoptional query boolean true = only items with stock > 0
curl "https://api.modula24.com/stock?warehouse=hamburg&skus=kugel,rohr_350"
Response (shortened)
{
  "count": 2, "data_updated_at": "2026-09-29T10:43:15+00:00",
  "items": [
    {"sku": "kugel", "warehouse": "hamburg", "title": "Kugel - Ersatzkugel", "price": 3.5, "currency": "EUR",
     "available": 3243, "ean": "", "url": "https://modula24.com/products/kugel-ersatzkugel-usm-haller",
     "urls": {"de": "https://modula24.com/products/kugel-ersatzkugel-usm-haller", "en": "…", "fr": "…", "it": "https://modula24.com/it/products/pallina-di-ricambio-usm-haller"},
     "updated_at": "2026-09-28T17:30:15Z"},
    {"sku": "rohr_350", "warehouse": "hamburg", "title": "Rohr Ohne Loch – 350 mm", "price": 4.5, "currency": "EUR",
     "available": 300, "ean": "", "url": "https://modula24.com/products/rohr-ohne-bohrung-100-mm-bis-750-mm-usm-haller?variant=58436497375496",
     "urls": {"de": "…", "en": "https://modula24.com/en/products/tube-without-bore-100-mm-to-750-mm-usm-haller?variant=58436497375496", "fr": "…", "it": "…"},
     "updated_at": "2026-09-29T11:40:18Z"}
  ]
}

GET /stock/{sku}

Stock of one SKU – Stock of one SKU across all warehouses with the sum total_available. With ?warehouse= only one warehouse. Unknown SKU: 404.

Parameters
NameInTypeDescription
skurequired path string Stock SKU, case-insensitive
warehouseoptional query string hamburg or china
curl https://api.modula24.com/stock/kugel
Response (shortened)
{
  "sku": "kugel", "total_available": 3243,
  "warehouses": [
    {"sku": "kugel", "warehouse": "china", "available": 0, "…": "…"},
    {"sku": "kugel", "warehouse": "hamburg", "available": 3243, "…": "…"}
  ]
}

GET /stock.csv

Stock as CSV – For Excel & co. Columns: warehouse, SKU, EAN, item name, price, currency, stock, shop URL, updated.

Parameters
NameInTypeDescription
warehouseoptional query string hamburg, china or empty
in_stockoptional query boolean only items in stock
sepoptional query string Separator ; (default) or ,
curl -o bestand.csv "https://api.modula24.com/stock.csv?warehouse=hamburg&sep=,"
Response (shortened)
Lager,SKU,EAN,Artikelname,Preis,Waehrung,Bestand,Shop-URL,Stand
hamburg,kugel,,Kugel - Ersatzkugel,3.50,EUR,3243,https://modula24.com/products/kugel-ersatzkugel-usm-haller,2026-09-28 17:30

GET /warehouses

Warehouses – List of warehouses. In addition, GET /health returns the number of SKUs per warehouse and the data timestamp.

curl https://api.modula24.com/warehouses
curl https://api.modula24.com/health
Response (shortened)
{"warehouses": [{"id": "hamburg", "name": "Hamburg"}, {"id": "china", "name": "China"}]}

{"status": "ok", "skus": 308, "per_warehouse": {"china": 154, "hamburg": 154},
 "data_updated_at": "2026-09-29T10:43:15+00:00"}

Product data & feeds

Base URL: https://modula24.com

All orderable items with price, availability, images and weight – per language as JSON and in Google Merchant Center format. The feeds are regenerated with every change in the shop. You need the variant_id for the shipping API and the cart link.

GET /products.json

Products (Shopify-compatible) – All products with variants in the familiar Shopify format – existing Shopify tools keep working. Single product: /products/{handle}.json, products of a category: /collections/{handle}/products.json. Other languages with a prefix, e.g. /en/products.json. The variant id is the variant_id for the shipping API and the cart link.

Parameters
NameInTypeDescription
handleoptional path string URL name of the product or category (from the link)
curl https://modula24.com/products.json
curl https://modula24.com/products/rohr-ohne-bohrung-100-mm-bis-750-mm-usm-haller.json
curl https://modula24.com/collections/konnektoren-usm-haller/products.json
Response (shortened)
{
  "product": {
    "id": 12175235252488, "title": "Rohr ohne Bohrung - 100 mm bis 750 mm - kompatibel mit USM Haller",
    "handle": "rohr-ohne-bohrung-100-mm-bis-750-mm-usm-haller", "vendor": "Modula24",
    "variants": [
      {"id": 58436497080584, "title": "100", "price": "2.50", "price_usd": "2.85", "sku": "M24-58436497080584",
       "available": true, "option1": "100", "grams": 42, "weight": 0.042, "weight_unit": "kg"},
      "…"
    ],
    "options": ["…"], "images": ["…"]
  }
}

GET /feeds/products.{lang}.json

Product feed (JSON) – {lang} = de, en, fr or it. One entry per variant. availability = in_stock / out_of_stock, prices in EUR and USD.

Parameters
NameInTypeDescription
langrequired path string Language
curl https://modula24.com/feeds/products.de.json
Response (shortened)
{
  "generated": "2026-09-29T13:02:49Z", "language": "de", "currency": "EUR",
  "items": [
    {"id": "M24-58436517069064", "variant_id": "58436517069064",
     "title": "Konnektor Connector Verbindung - 100% kompatibel mit USM Haller",
     "description": "…", "link": "https://modula24.com/products/konnektor-connector-verbindung-usm-haller",
     "image_link": "https://modula24.com/img/…webp", "availability": "in_stock",
     "price": "0.95 EUR", "price_usd": "1.09 USD", "brand": "Modula24", "condition": "new",
     "shipping_weight": "0.034 kg", "options": {}}
  ]
}

GET /feeds/google.{lang}.xml

Google Merchant feed (XML) – RSS 2.0 with Google namespace for Merchant Center, price comparison sites and marketplaces. {lang} = de, en, fr, it or us (USD). Also: /sitemap.xml.

Parameters
NameInTypeDescription
langrequired path string Language or us
curl https://modula24.com/feeds/google.de.xml
Response (shortened)
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"><channel>
<item>
  <g:id>M24-58436517069064</g:id>
  <title>Konnektor Connector Verbindung - 100% kompatibel mit USM Haller</title>
  <g:price>0.95 EUR</g:price>
  <g:availability>in_stock</g:availability>
  …
</item>

Cart link

Base URL: https://modula24.com

A link that puts items directly into a visitor’s cart – e.g. from a parts list, a quote, a planning tool or an AI assistant. The visitor sees “N items were added to the cart” and orders in the checkout themselves. Only known, available variants are added; items already in the cart remain, identical variants are added up. Max. 60 lines per link.

LINK /cart?add={variant_id}:{qty},…

Add items to the cart – Languages: /cart (German), /en/cart, /fr/cart, /it/cart. With &cfg=ID the configuration ID is shown as well.

Parameters
NameInTypeDescription
addrequired query string VARIANT:QTY, several separated by commas
cfgoptional query string Configuration ID (display only)
https://modula24.com/cart?add=58436497375496:8,58546503745800:8
https://modula24.com/en/cart?add=58436497375496:8&cfg=LFKDD5KLP9MG

Configurator API

Base URL: https://konfigurator.modula24.com

Every configuration saved in the 3D configurator has a 12-character ID (e.g. LFKDD5KLP9MG). With this ID you can open the configuration, retrieve price, weight and outer dimensions, convert it into shop items (for the cart link) and calculate the shipping costs (see Shipping API). Open the configurator: https://konfigurator.modula24.com/?load=ID.

GET /checkout-api.php?action=summary&id={id}

Summary – Price according to the configurator, weight, outer dimensions (mm) and parts list.

Parameters
NameInTypeDescription
idrequired query string Configuration ID
curl "https://konfigurator.modula24.com/checkout-api.php?action=summary&id=LFKDD5KLP9MG"
Response (shortened)
{
  "ok": true, "id": "LFKDD5KLP9MG", "currency": "EUR", "total": 1487.66, "weight": 69,
  "dims": {"width": 1795, "height": 600, "depth": 500},
  "items": [{"label": "Rohr 100 mm", "qty": 4, "type": "tube"}, {"label": "Rohr 125 mm", "qty": 4, "type": "tube"}, "…"],
  "configuratorUrl": "https://konfigurator.modula24.com/?load=LFKDD5KLP9MG"
}

GET /checkout-api.php?action=cart&id={id}&lang={lang}

As shop items – Converts the parts list into orderable shop items (lines) and returns the ready-made cart link (url). Parts not available in the shop are listed in missing.

Parameters
NameInTypeDescription
idrequired query string Configuration ID
langoptional query string Language of the cart link: de, en, fr, it
curl "https://konfigurator.modula24.com/checkout-api.php?action=cart&id=LFKDD5KLP9MG&lang=de"
Response (shortened)
{
  "ok": true,
  "lines": [{"vid": "58436497080584", "qty": 4, "sku": "rohr_100", "price": 2.5, "title": "Rohr ohne Bohrung … – 100"}, "…"],
  "missing": [{"text": "Tablar Metall 500x350 RAL 6003", "qty": 2, "reason": "derzeit nicht lieferbar"}, "…"],
  "total": 693.79,
  "url": "https://modula24.com/cart?add=58436497080584:4,…&cfg=LFKDD5KLP9MG"
}

GET /galerie.php?format=json

Gallery images – Photorealistic AI images of real configurations with colour, outer dimensions (mm), compartments and configuration ID. Image URL: https://konfigurator.modula24.com/images/ai/{file}.

curl "https://konfigurator.modula24.com/galerie.php?format=json"
Response (shortened)
{
  "images": [
    {"file": "MULTI2_LFKDD5KLP9MG.webp", "code": "MULTI2", "ral": "", "glass": false, "price": 1488,
     "weight": 69, "cfg": "LFKDD5KLP9MG", "dims": {"w": 1795, "h": 550, "d": 500},
     "cells": 7, "doors": 3, "trays": 0}
  ]
}

Questions, higher limits or a custom integration (B2B, wholesale)? Write to us at service@modula24.com.