Pas de pièces USM Haller d'origine, mais 100% compatibles. Nous n'avons aucune relation commerciale avec USM Haller.

API et interfaces

Nos interfaces publiques pour revendeurs, partenaires, développeurs et agents IA : calculer les frais de port, consulter le stock, charger les données produits, préparer des paniers et exploiter les configurations du configurateur 3D. Toutes les interfaces décrites ici sont gratuites, en lecture seule et sans inscription.

Généralités

  • Format : JSON (UTF-8) ; montants sous forme de chaîne avec un point, p. ex. "18.14", en EUR (sauf indication contraire).
  • Authentification : aucune. Tous les points d’accès décrits ici sont publics et en lecture seule.
  • Erreur 403 ? Nos serveurs sont derrière Cloudflare. curl, Python requests et JavaScript fetch fonctionnent sans réglage supplémentaire ; certaines bibliothèques (p. ex. Python urllib) sont refusées. Envoyez alors votre propre User-Agent, p. ex. MeineFirma-Integration/1.0 (kontakt@example.com).
  • Appel depuis le navigateur (CORS) : l’API de stock et les flux produits peuvent être appelés depuis n’importe quel site. L’API des frais de port est destinée aux appels de serveur à serveur – appelez-la depuis votre backend.
  • Limites : frais de port pour les configurations : 60 requêtes par minute et par adresse IP (ensuite 429). Merci de ne pas interroger les données plus souvent que nécessaire et de mettre les résultats en cache (p. ex. stock 5 à 10 minutes).
  • Erreurs : codes HTTP (400 saisie invalide, 404 introuvable, 422 paramètres manquants ou invalides, 429 trop de requêtes). Le message figure dans le champ detail ou error.
  • Pour les agents IA : un aperçu compact pour les modèles de langage est disponible sous /llms.txt et /agents.md.

API frais de port

URL de base: https://modula24.com

Calcule les frais de port exactement comme notre panier et notre caisse – pour un panier, pour des poids ou pour une configuration du configurateur 3D. Les articles de notre entrepôt de Hambourg partent par DHL (colis jusqu’à 31,5 kg) ; les articles disponibles uniquement dans notre entrepôt en Chine partent par fret maritime ou aérien. Si seule une partie est à Hambourg, un envoi partiel est proposé. L’API détermine l’emplacement des articles à partir du stock actuel.

Modes d’envoi (id) : dhl (depuis Hambourg : DHL Paket International Premium, livraison à domicile ; en Allemagne colis DHL), dhl_eco (depuis Hambourg : DHL Paket International Economy, livraison en point relais/bureau de poste – uniquement hors UE et pas dans tous les pays), sea / air (articles uniquement en Chine), split_sea / split_air (envoi partiel : Hambourg par DHL Premium, le reste depuis la Chine), sea_door (hors UE uniquement : toute la commande depuis l’entrepôt en Chine par voie maritime jusqu’à la porte, dédouanée, 9 à 11 semaines – toujours en dernier). Le tarif figure aussi dans legs[].product. Chaque option contient cost, le délai days avec unit (days = jours ouvrés, weeks = semaines) et les parties de l’envoi legs. L’option la moins chère figure en premier (sauf sea_door).

GET /api/checkout/config

Pays de livraison – Liste des pays de livraison (codes ISO 3166) et des devises. Nous livrons uniquement ces pays.

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

POST /api/checkout/shipping

Frais de port pour des articles – Options d’envoi pour un panier. Les ID de variantes (variant_id) figurent dans le flux produits.

Paramètres
NomEmplacementTypeDescription
countryobligatoire corps (JSON) string Pays de livraison, code ISO (p. ex. DE, AT)
itemsobligatoire corps (JSON) array Articles : [{"id": "<variant_id>", "qty": 2}], 100 lignes max.
currencyfacultatif corps (JSON) string EUR (par défaut) ou 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}]}'
Réponse (abrégée)
{
  "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

Frais de port pour des poids – Sans articles, directement avec les poids par entrepôt – p. ex. pour vos propres calculs.

Paramètres
NomEmplacementTypeDescription
countryobligatoire corps (JSON) string Pays de livraison, code ISO
kg_hamburgfacultatif corps (JSON) number Poids depuis l’entrepôt de Hambourg en kg (0–5000)
kg_chinafacultatif corps (JSON) number Poids depuis l’entrepôt en Chine en kg (0–5000)
currencyfacultatif corps (JSON) string EUR ou 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}'
Réponse (abrégée)
{
  "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}

Frais de port pour une configuration – Pour une configuration enregistrée du configurateur 3D : la nomenclature est convertie en articles de la boutique comme avec le bouton « Ajouter au panier ». Sans country, vous obtenez les options pour tous les pays de livraison (countries). Les pièces sans article disponible figurent dans missing – leur poids n’est pas inclus et complete vaut false. Aussi en POST avec {"config": "…"} ou une nomenclature {"bom": […]}. 60 requêtes par minute max.

Paramètres
NomEmplacementTypeDescription
configobligatoire query string ID de configuration (p. ex. LFKDD5KLP9MG)
countryfacultatif query string Pays de livraison ; vide = tous les pays
currencyfacultatif query string EUR ou USD
curl "https://modula24.com/api/checkout/shipping?config=LFKDD5KLP9MG&country=AT"
Réponse (abrégée)
{
  "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": ["…"]}]
}

API de stock

URL de base: https://api.modula24.com

Stock actuel de notre entrepôt de Hambourg (hamburg) par SKU. Idéal pour les revendeurs, les comparateurs de prix et les ERP. Les données sont mises à jour en continu (les ventes de tous les canaux sont comptabilisées toutes les 10 minutes) ; le champ data_updated_at indique la dernière modification. Appel possible directement depuis le navigateur (CORS).

Champs par article : sku, warehouse, title, price + currency, available (quantité disponible), ean, url (page produit sur modula24.com, en allemand), urls (page produit par langue : de, en, fr, it), updated_at. Si un article n’est pas proposé sur modula24.com, url et urls valent null.

GET /stock

Consulter le stock – Tous les articles ou filtrés. Les filtres sont combinables.

Paramètres
NomEmplacementTypeDescription
warehousefacultatif query string ID de l’entrepôt (voir /warehouses), actuellement hamburg ; vide = tous
skusfacultatif query string SKU séparés par des virgules, p. ex. kugel,rohr_350
qfacultatif query string Recherche libre dans SKU, titre et EAN
eanfacultatif query string EAN exact
in_stockfacultatif query boolean true = uniquement les articles en stock
curl "https://api.modula24.com/stock?warehouse=hamburg&skus=kugel,rohr_350"
Réponse (abrégée)
{
  "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 d’un SKU – Stock d’un SKU dans tous les entrepôts avec la somme total_available. Avec ?warehouse=, un seul entrepôt. SKU inconnu : 404.

Paramètres
NomEmplacementTypeDescription
skuobligatoire chemin string SKU, insensible à la casse
warehousefacultatif query string ID de l’entrepôt (voir /warehouses), actuellement hamburg ; vide = tous
curl https://api.modula24.com/stock/kugel
Réponse (abrégée)
{
  "sku": "kugel", "total_available": 3243,
  "warehouses": [
    {"sku": "kugel", "warehouse": "hamburg", "available": 3243, "…": "…"}
  ]
}

GET /stock.csv

Stock en CSV – Pour Excel & co. Colonnes : entrepôt, SKU, EAN, nom, prix, devise, stock, URL boutique, mise à jour.

Paramètres
NomEmplacementTypeDescription
warehousefacultatif query string ID de l’entrepôt (voir /warehouses), actuellement hamburg ; vide = tous
in_stockfacultatif query boolean uniquement les articles en stock
sepfacultatif query string Séparateur ; (par défaut) ou ,
curl -o bestand.csv "https://api.modula24.com/stock.csv?warehouse=hamburg&sep=,"
Réponse (abrégée)
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

Entrepôts – Liste des entrepôts. GET /health renvoie en outre le nombre de SKU par entrepôt et la date des données.

curl https://api.modula24.com/warehouses
curl https://api.modula24.com/health
Réponse (abrégée)
{"warehouses": [{"id": "hamburg", "name": "Hamburg"}]}

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

Données produits et flux

URL de base: https://modula24.com

Tous les articles commandables avec prix, disponibilité, images et poids – par langue en JSON et au format Google Merchant Center. Les flux sont régénérés à chaque modification de la boutique. La variant_id est nécessaire pour l’API des frais de port et le lien panier.

GET /products.json

Produits (compatible Shopify) – Tous les produits avec variantes au format Shopify habituel – les outils Shopify existants continuent de fonctionner. Produit unique : /products/{handle}.json, produits d’une catégorie : /collections/{handle}/products.json. Autres langues avec préfixe, p. ex. /fr/products.json. L’id de variante est la variant_id pour l’API des frais de port et le lien panier.

Paramètres
NomEmplacementTypeDescription
handlefacultatif chemin string Nom d’URL du produit ou de la catégorie (issu du lien)
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
Réponse (abrégée)
{
  "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

Flux produits (JSON) – {lang} = de, en, fr ou it. Une entrée par variante. availability = in_stock / out_of_stock, prix en EUR et USD.

Paramètres
NomEmplacementTypeDescription
langobligatoire chemin string Langue
curl https://modula24.com/feeds/products.de.json
Réponse (abrégée)
{
  "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

Flux Google Merchant (XML) – RSS 2.0 avec l’espace de noms Google pour Merchant Center, comparateurs de prix et places de marché. {lang} = de, en, fr, it ou us (USD). Également : /sitemap.xml.

Paramètres
NomEmplacementTypeDescription
langobligatoire chemin string Langue ou us
curl https://modula24.com/feeds/google.de.xml
Réponse (abrégée)
<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>

Lien panier

URL de base: https://modula24.com

Un lien qui ajoute des articles directement au panier d’un visiteur – p. ex. depuis une nomenclature, un devis, un outil de planification ou un assistant IA. Le visiteur voit « N articles ont été ajoutés au panier » et commande lui-même à la caisse. Seules les variantes connues et disponibles sont reprises ; les articles déjà présents restent, les variantes identiques sont additionnées. 60 lignes max. par lien.

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

Ajouter des articles au panier – Langues : /cart (allemand), /en/cart, /fr/cart, /it/cart. Avec &cfg=ID, l’ID de configuration est également affiché.

Paramètres
NomEmplacementTypeDescription
addobligatoire query string VARIANTE:QTÉ, plusieurs séparées par des virgules
cfgfacultatif query string ID de configuration (affichage seulement)
https://modula24.com/cart?add=58436497375496:8,58546503745800:8
https://modula24.com/en/cart?add=58436497375496:8&cfg=LFKDD5KLP9MG

API du configurateur

URL de base: https://konfigurator.modula24.com

Chaque configuration enregistrée dans le configurateur 3D possède un ID de 12 caractères (p. ex. LFKDD5KLP9MG). Avec cet ID, vous pouvez ouvrir la configuration, obtenir le prix, le poids et les dimensions extérieures, la convertir en articles de la boutique (pour le lien panier) et calculer les frais de port (voir API frais de port). Ouvrir le configurateur : https://konfigurator.modula24.com/?load=ID.

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

Résumé – Prix selon le configurateur, poids, dimensions extérieures (mm) et nomenclature.

Paramètres
NomEmplacementTypeDescription
idobligatoire query string ID de configuration
curl "https://konfigurator.modula24.com/checkout-api.php?action=summary&id=LFKDD5KLP9MG"
Réponse (abrégée)
{
  "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}

En articles de la boutique – Convertit la nomenclature en articles commandables (lines) et renvoie le lien panier prêt à l’emploi (url). Les pièces non disponibles figurent dans missing.

Paramètres
NomEmplacementTypeDescription
idobligatoire query string ID de configuration
langfacultatif query string Langue du lien panier : de, en, fr, it
curl "https://konfigurator.modula24.com/checkout-api.php?action=cart&id=LFKDD5KLP9MG&lang=de"
Réponse (abrégée)
{
  "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

Images de la galerie – Images IA photoréalistes de configurations réelles avec couleur, dimensions extérieures (mm), compartiments et ID de configuration. URL de l’image : https://konfigurator.modula24.com/images/ai/{file}.

curl "https://konfigurator.modula24.com/galerie.php?format=json"
Réponse (abrégée)
{
  "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}
  ]
}

Des questions, des limites plus élevées ou une intégration sur mesure (B2B, vente en gros) ? Écrivez-nous à service@modula24.com.