Keine Original-USM-Haller-Artikel, aber 100% kompatibel. Wir unterhalten keine Geschäftsbeziehung zu USM Haller.

API & Schnittstellen

Unsere öffentlichen Schnittstellen für Händler, Partner, Entwickler und KI-Agenten: Versandkosten berechnen, Lagerbestand abfragen, Produktdaten laden, Warenkörbe vorbereiten und Konfigurationen aus dem 3D-Konfigurator auswerten. Alle hier beschriebenen Schnittstellen sind kostenlos, lesend und ohne Anmeldung nutzbar.

Allgemeines

  • Format: JSON (UTF-8), Beträge als Zeichenkette mit Punkt, z. B. "18.14", in EUR (sofern nicht anders angegeben).
  • Anmeldung: nicht nötig. Alle beschriebenen Endpunkte sind öffentlich und nur lesend.
  • Fehler 403? Unsere Server stehen hinter Cloudflare. curl, Python requests und JavaScript fetch funktionieren ohne weitere Angaben; einzelne Bibliotheken (z. B. Python urllib) werden abgewiesen. Senden Sie dann einen eigenen User-Agent, z. B. MeineFirma-Integration/1.0 (kontakt@example.com).
  • Aufruf aus dem Browser (CORS): Die Lagerbestand-API und die Produkt-Feeds erlauben Aufrufe von jeder Website. Die Versandkosten-API ist für Aufrufe von Servern gedacht – rufen Sie sie aus Ihrem Backend auf.
  • Grenzen: Versandkosten für Konfigurationen: 60 Anfragen pro Minute und IP-Adresse (danach 429). Bitte fragen Sie Daten nicht häufiger als nötig ab und speichern Sie Ergebnisse kurz zwischen (z. B. Lagerbestand 5–10 Minuten).
  • Fehler: HTTP-Statuscodes (400 ungültige Eingabe, 404 nicht gefunden, 422 Parameter fehlen oder ungültig, 429 zu viele Anfragen). Der Text steht im Feld detail bzw. error.
  • Für KI-Agenten: Eine kompakte Übersicht für Sprachmodelle finden Sie unter /llms.txt und /agents.md.

Versandkosten-API

Basis-URL: https://modula24.com

Berechnet die Versandkosten genau wie unser Warenkorb und unsere Kasse – für einen Warenkorb, für Gewichte oder für eine Konfiguration aus dem 3D-Konfigurator. Ware aus unserem Lager in Hamburg geht per DHL (Pakete bis 31,5 kg), Ware, die nur in unserem Lager in China vorrätig ist, per Seefracht oder Luftfracht. Liegt nur ein Teil in Hamburg, gibt es eine Teilsendung. Welche Artikel wo liegen, ermittelt die API aus dem aktuellen Lagerbestand.

Versandarten (id): dhl (ab Hamburg: DHL Paket International Premium, Zustellung an die Haustür; in Deutschland DHL Paket), dhl_eco (ab Hamburg: DHL Paket International Economy, Zustellung an Packstation/Filiale – nur außerhalb der EU und nicht in allen Ländern), sea / air (nur China-Ware), split_sea / split_air (Teilsendung: Hamburg per DHL Premium, Rest aus China), sea_door (nur außerhalb der EU: ganze Bestellung ab Lager China per Seefracht bis zur Haustür, verzollt, 9–11 Wochen – steht immer am Ende). Welcher Tarif gilt, steht zusätzlich in legs[].product. Jede Option enthält cost, die Lieferzeit days mit unit (days = Werktage, weeks = Wochen) und die einzelnen Sendungsteile legs. Die günstigste Option steht zuerst (außer sea_door).

GET /api/checkout/config

Lieferländer – Liste der Lieferländer (ISO-3166-Codes) und Währungen. Nur diese Länder werden beliefert.

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

POST /api/checkout/shipping

Versandkosten für Artikel – Versandoptionen für einen Warenkorb. Die Varianten-IDs (variant_id) stehen im Produkt-Feed.

Parameter
NameOrtTypBeschreibung
countryPflicht Body (JSON) string Lieferland, ISO-Code (z. B. DE, AT)
itemsPflicht Body (JSON) array Artikel: [{"id": "<variant_id>", "qty": 2}], höchstens 100 Positionen
currencyoptional Body (JSON) string EUR (Standard) oder 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}]}'
Antwort (gekürzt)
{
  "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

Versandkosten für Gewichte – Ohne Artikel, direkt mit Gewichten je Lager – z. B. für eigene Kalkulationen.

Parameter
NameOrtTypBeschreibung
countryPflicht Body (JSON) string Lieferland, ISO-Code
kg_hamburgoptional Body (JSON) number Gewicht ab Lager Hamburg in kg (0–5000)
kg_chinaoptional Body (JSON) number Gewicht ab Lager China in kg (0–5000)
currencyoptional Body (JSON) string EUR oder 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}'
Antwort (gekürzt)
{
  "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}

Versandkosten für eine Konfiguration – Für eine gespeicherte Konfiguration aus dem 3D-Konfigurator: Die Stückliste wird wie beim Knopf „In den Warenkorb“ in Shop-Artikel umgesetzt. Ohne country kommen die Optionen für alle Lieferländer (countries). Teile ohne lieferbaren Shop-Artikel stehen in missing – ihr Gewicht ist nicht enthalten, dann ist complete = false. Auch als POST mit {"config": "…"} oder einer Stückliste {"bom": […]}. Höchstens 60 Anfragen pro Minute.

Parameter
NameOrtTypBeschreibung
configPflicht Query string Konfigurations-ID (z. B. LFKDD5KLP9MG)
countryoptional Query string Lieferland; leer = alle Länder
currencyoptional Query string EUR oder USD
curl "https://modula24.com/api/checkout/shipping?config=LFKDD5KLP9MG&country=AT"
Antwort (gekürzt)
{
  "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": ["…"]}]
}

Lagerbestand-API

Basis-URL: https://api.modula24.com

Aktueller Bestand unserer Lager in Hamburg (hamburg) und China (china) je Lager-SKU. Ideal für Händler, Preisvergleiche und Warenwirtschaften. Die Daten werden laufend aktualisiert (Verkäufe über alle Kanäle werden alle 10 Minuten verbucht); das Feld data_updated_at zeigt die letzte Änderung. Aufruf auch direkt aus dem Browser möglich (CORS).

Felder je Artikel: sku, warehouse, title, price + currency, available (verfügbare Menge), ean, url (Produktseite auf modula24.com, deutsch), urls (Produktseite je Sprache: de, en, fr, it), updated_at. Wird ein Artikel auf modula24.com nicht angeboten, sind url und urls null.

GET /stock

Bestand abfragen – Alle Artikel oder gefiltert. Filter lassen sich kombinieren.

Parameter
NameOrtTypBeschreibung
warehouseoptional Query string hamburg oder china; leer = alle Lager
skusoptional Query string Kommagetrennte SKUs, z. B. kugel,rohr_350
qoptional Query string Freitextsuche in SKU, Titel und EAN
eanoptional Query string Exakte EAN
in_stockoptional Query boolean true = nur Artikel mit Bestand > 0
curl "https://api.modula24.com/stock?warehouse=hamburg&skus=kugel,rohr_350"
Antwort (gekürzt)
{
  "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}

Bestand einer SKU – Bestand einer SKU über alle Lager mit Summe total_available. Mit ?warehouse= nur ein Lager. Unbekannte SKU: 404.

Parameter
NameOrtTypBeschreibung
skuPflicht Pfad string Lager-SKU, Groß-/Kleinschreibung egal
warehouseoptional Query string hamburg oder china
curl https://api.modula24.com/stock/kugel
Antwort (gekürzt)
{
  "sku": "kugel", "total_available": 3243,
  "warehouses": [
    {"sku": "kugel", "warehouse": "china", "available": 0, "…": "…"},
    {"sku": "kugel", "warehouse": "hamburg", "available": 3243, "…": "…"}
  ]
}

GET /stock.csv

Bestand als CSV – Für Excel & Co. Spalten: Lager, SKU, EAN, Artikelname, Preis, Währung, Bestand, Shop-URL, Stand.

Parameter
NameOrtTypBeschreibung
warehouseoptional Query string hamburg, china oder leer
in_stockoptional Query boolean nur Artikel mit Bestand
sepoptional Query string Trennzeichen ; (Standard, Excel DE) oder ,
curl -o bestand.csv "https://api.modula24.com/stock.csv?warehouse=hamburg&sep=,"
Antwort (gekürzt)
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

Lager – Liste der Lager. Zusätzlich liefert GET /health die Anzahl der SKUs je Lager und den Datenstand.

curl https://api.modula24.com/warehouses
curl https://api.modula24.com/health
Antwort (gekürzt)
{"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"}

Produktdaten & Feeds

Basis-URL: https://modula24.com

Alle bestellbaren Artikel mit Preis, Verfügbarkeit, Bildern und Gewicht – je Sprache als JSON und im Format des Google Merchant Centers. Die Feeds werden bei jeder Änderung im Shop neu erzeugt. Die variant_id brauchen Sie für die Versandkosten-API und den Warenkorb-Link.

GET /products.json

Produkte (Shopify-kompatibel) – Alle Produkte mit Varianten im bekannten Shopify-Format – vorhandene Shopify-Werkzeuge funktionieren damit weiter. Einzelnes Produkt: /products/{handle}.json, Produkte einer Kategorie: /collections/{handle}/products.json. Andere Sprachen mit Präfix, z. B. /en/products.json. Die Varianten-id ist die variant_id für Versandkosten-API und Warenkorb-Link.

Parameter
NameOrtTypBeschreibung
handleoptional Pfad string URL-Name des Produkts bzw. der Kategorie (aus dem 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
Antwort (gekürzt)
{
  "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

Produkt-Feed (JSON) – {lang} = de, en, fr oder it. Eine Zeile je Variante. availability = in_stock / out_of_stock, Preise in EUR und USD.

Parameter
NameOrtTypBeschreibung
langPflicht Pfad string Sprache
curl https://modula24.com/feeds/products.de.json
Antwort (gekürzt)
{
  "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 mit Google-Namensraum für Merchant Center, Preisportale und Marktplätze. {lang} = de, en, fr, it oder us (USD). Außerdem: /sitemap.xml.

Parameter
NameOrtTypBeschreibung
langPflicht Pfad string Sprache bzw. us
curl https://modula24.com/feeds/google.de.xml
Antwort (gekürzt)
<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>

Warenkorb-Link

Basis-URL: https://modula24.com

Ein Link, der Artikel direkt in den Warenkorb eines Besuchers legt – z. B. aus einer Stückliste, einem Angebot, einem Planungs-Tool oder einem KI-Assistenten. Der Besucher sieht „N Artikel wurden in den Warenkorb gelegt“ und bestellt selbst in der Kasse. Nur bekannte, lieferbare Varianten werden übernommen; bereits vorhandene Artikel bleiben im Warenkorb, gleiche Varianten werden addiert. Höchstens 60 Positionen je Link.

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

Artikel in den Warenkorb legen – Sprachen: /cart (Deutsch), /en/cart, /fr/cart, /it/cart. Mit &cfg=ID wird die Konfigurations-ID mit angezeigt.

Parameter
NameOrtTypBeschreibung
addPflicht Query string VARIANTE:MENGE, mehrere durch Komma getrennt
cfgoptional Query string Konfigurations-ID (nur Anzeige)
https://modula24.com/cart?add=58436497375496:8,58546503745800:8
https://modula24.com/en/cart?add=58436497375496:8&cfg=LFKDD5KLP9MG

Konfigurator-API

Basis-URL: https://konfigurator.modula24.com

Jede im 3D-Konfigurator gespeicherte Konfiguration hat eine ID aus 12 Zeichen (z. B. LFKDD5KLP9MG). Mit dieser ID können Sie die Konfiguration öffnen, Preis, Gewicht und Außenmaße abrufen, sie in Shop-Artikel umsetzen (für den Warenkorb-Link) und die Versandkosten berechnen (siehe Versandkosten-API). Konfigurator öffnen: https://konfigurator.modula24.com/?load=ID.

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

Zusammenfassung – Preis laut Konfigurator, Gewicht, Außenmaße (mm) und Stückliste.

Parameter
NameOrtTypBeschreibung
idPflicht Query string Konfigurations-ID
curl "https://konfigurator.modula24.com/checkout-api.php?action=summary&id=LFKDD5KLP9MG"
Antwort (gekürzt)
{
  "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}

Als Shop-Artikel – Setzt die Stückliste in bestellbare Shop-Artikel um (lines) und liefert den fertigen Warenkorb-Link (url). Nicht im Shop erhältliche oder nicht lieferbare Teile stehen in missing.

Parameter
NameOrtTypBeschreibung
idPflicht Query string Konfigurations-ID
langoptional Query string Sprache des Warenkorb-Links: de, en, fr, it
curl "https://konfigurator.modula24.com/checkout-api.php?action=cart&id=LFKDD5KLP9MG&lang=de"
Antwort (gekürzt)
{
  "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

Galerie-Bilder – Fotorealistische KI-Bilder echter Konfigurationen mit Farbe, Außenmaßen (mm), Fächern und Konfigurations-ID. Bild-URL: https://konfigurator.modula24.com/images/ai/{file}.

curl "https://konfigurator.modula24.com/galerie.php?format=json"
Antwort (gekürzt)
{
  "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}
  ]
}

Fragen, höhere Limits oder eine individuelle Anbindung (B2B, Großhandel)? Schreiben Sie uns an service@modula24.com.