Se connecter
Développeurs

API Loader4D

Appelez l'optimisation de chargement depuis votre propre ERP, WMS ou système de gestion du transport. Le même moteur de placement que dans le navigateur, derrière une seule requête HTTP.

L'API est en ligne

Une clé de test vous donne 25 appels par mois : moteur réel, plan réel, aucun crédit consommé. Validez votre intégration sans payer, puis choisissez une formule pour passer en production.

Ce que vous pouvez faire

Point d'accès d'optimisation

Envoyez vos espaces et votre liste de charges en JSON et recevez le plan de placement avec les coordonnées de chaque pièce. Les charges à l'essieu et les articles non placés figurent aussi dans la réponse.

Le résultat n'est jamais perdu

Une optimisation prend quelques secondes. Dans une conception synchrone, une connexion coupée détruit le résultat ; ici vous revenez avec l'identifiant de tâche et vous le récupérez, sans jamais payer deux fois le même calcul.

Une facture prévisible

Les crédits sont calculés par paliers, pas à la pièce. Le moteur dépense le même budget de recherche pour un petit envoi que pour un grand ; une tarification à la pièce pénaliserait les petits appels et rendrait votre facture imprévisible.

Développez sans entamer votre quota

Les clés de test renvoient de vrais résultats sans consommer de crédits ; elles sont plafonnées à 25 appels par mois. Testez jusqu’à la fin de votre intégration : passer en production revient à changer de clé.

Points d'accès

L'authentification se fait par un en-tête bearer portant votre clé. Les clés ne sont jamais acceptées dans la chaîne de requête.

Authorization: Bearer l4d_live_...
Appel Ce qu’il fait
POST /api/v1/pack Ouvre une tâche de placement ; renvoie 202 et un identifiant de tâche.
GET /api/v1/jobs/{id} Renvoie l'état de la tâche et, une fois terminée, son résultat.
GET /api/v1/usage Renvoie votre quota de la période et les crédits restants.

Exemple de requête

Les longueurs sont en centimètres et les poids en kilogrammes. Il n'existe pas de réglage d'unité par requête ; convertissez de votre côté. Une requête envoyée en pouces charge un camion dix fois trop long.

POST /api/v1/pack
Authorization: Bearer l4d_test_...
Content-Type: application/json
Idempotency-Key: 7f3c1a9e4b6d4c2f

{
  "reference": "SO-2026-4417",
  "spaces": [
    { "id": "sp1", "name": "40HC", "type": "container",
      "length": 1200, "width": 235, "height": 269,
      "max_weight": 26000, "available": 2 }
  ],
  "items": [
    { "id": "A1", "name": "Karton", "length": 120, "width": 100, "height": 40,
      "weight": 8, "quantity": 24, "group": "Siparis-1",
      "constraints": { "no_tilt": true } },
    { "id": "B1", "name": "Varil", "shape": "cylinder",
      "diameter": 58, "length": 88, "weight": 190, "quantity": 12,
      "constraints": { "floor_only": true } }
  ],
  "strategy": { "group_items": true, "balance_load": true }
}

La réponse revient immédiatement ; pour le résultat, vous interrogez l'identifiant de tâche.

HTTP/1.1 202 Accepted
Location: /api/v1/jobs/ba7189d3b1824da3806ca3ee973b2294

{ "id": "ba7189d3...", "status": "queued", "progress": 0,
  "reference": "SO-2026-4417", "credits": 1 }

Quand la tâche se termine, chaque pièce arrive avec ses coordonnées. L'origine est le coin avant gauche inférieur de l'espace, et la valeur donnée est ce coin de la pièce, non son centre.

{ "id": "ba7189d3...", "status": "succeeded", "credits": 1,
  "result": {
    "summary": { "spaces_used": 1, "pieces_requested": 36,
                 "pieces_packed": 36, "weight": 2472,
                 "volume_utilization": 0.7431 },
    "spaces": [
      { "space_id": "sp1", "name": "40HC",
        "placements": [
          { "item_id": "A1", "sequence": 1,
            "x": 0, "y": 0, "z": 0,
            "length": 120, "width": 100, "height": 40, "weight": 8 }
        ],
        "axle_loads": [] }
    ],
    "unpacked": []
  } }

Consultez la référence de l'API pour la liste complète des champs et des contraintes, les codes d'erreur et le document OpenAPI

Crédits et limites

Les crédits sont décomptés à l'acceptation de la tâche, pas à sa fin. Sinon, cent appels arrivant en même temps passeraient tous le contrôle de quota avant qu'un seul ait été compté.

Total de pièces dans la requête Crédits
1 – 1001
101 – 1 0005
1 001 – 10 00025
10 001 et plus100

Ces limites existent pour qu'un seul appel ne puisse pas occuper le service pendant des minutes. Si votre charge de travail en demande plus, découpez-la ou écrivez-nous.

Questions fréquentes

Avec quel langage puis-je intégrer ?

Avec tout langage capable d'émettre une requête HTTP. Vous pouvez aussi télécharger notre document OpenAPI 3.0 et générer un client typé dans la plupart des langages ; c'est la différence entre une intégration de quelques heures et une de plusieurs jours.

Téléchargez openapi/v1.json

Comment fonctionne la tarification ?

L’API fait partie des formules payantes ; les appels en production nécessitent un pack de crédits, renouvelé à chaque période. Les crédits non utilisés ne sont pas reportés. L’essayer ne coûte aucun crédit : une clé de test autorise 25 appels par mois.

Politique de remboursement

Comment mes clés sont-elles protégées ?

Une clé n'est affichée qu'une fois, à sa création ; seule une empreinte chiffrée est conservée en base. Les clés appartiennent à l'équipe et non à une personne : votre intégration continue de fonctionner même si celui qui l'a mise en place quitte l'équipe. Donnez à chaque intégration sa propre clé ; en cas de soupçon de fuite, vous ne révoquez que celle-là et les autres continuent.

Politique de confidentialité

Et si j’envoie deux fois la même requête par erreur ?

Envoyez un en-tête Idempotency-Key avec une valeur que vous générez par requête logique. Une nouvelle tentative avec la même clé et le même corps renvoie la tâche d'origine au lieu d'en ouvrir une seconde. La même clé avec un corps différent est refusée : renvoyer silencieusement la réponse précédente vous laisserait attendre un travail qui n'a jamais été mis en file.

Une tâche interrompue reprend-elle où elle s’est arrêtée ?

Non, et il est juste de le dire clairement. La recherche est un calcul d'un seul tenant et aucun état intermédiaire n'est conservé ; une tâche échouée repart du début. Ce que l'identifiant de tâche vous apporte n'est pas la continuité, mais le fait que le résultat ne soit pas perdu.

Puis-je aussi voir les résultats dans l'interface ?

Les tâches ouvertes via l'API sont indépendantes et ne sont pas ajoutées à votre liste de projets ; le résultat revient directement dans la réponse. Les appels API consomment des crédits et non des sièges : ils n'affectent donc pas les sièges des membres qui utilisent l'interface.