Documentation API — Deviseur v2
Admin Test

Informations générales

Base URLhttp://[IP_SERVEUR]/deviseurapi_v2/api.php
FormatJSON (application/json), UTF-8
AuthentificationHeader X-API-Key obligatoire
Clés disponiblesn8n-key-2026 — workflow n8n
freescout-key-2026 — intégration FreeScout
CORSActivé toutes origines
Remplacer [IP_SERVEUR] par l'adresse du Mac mini (ex : 192.168.1.50).

POST /api.php?route=calculer

Calcule le prix de vente HT/TTC pour un produit selon ses caractéristiques et le profil client.

Corps de la requête

ChampTypeStatutDescription
produit_codestringObligatoireCode du produit (ex : carte_visite)
caracteristiquesobjectObligatoireToutes les entrées : dimensions de prix (quantité, format…) + options (papier, impression…). Tout dans un seul objet.
client_codestringOptionnelCode client — récupère automatiquement le CA depuis la base
client_cafloatOptionnelCA cumulé HT (€). Ignoré si client_code est fourni. Défaut : 0 (marge maximale).

Exemple — Carte de visite

POST /api.php?route=calculer
Headers: X-API-Key: n8n-key-2026

{
  "produit_code": "carte_visite",
  "caracteristiques": {
    "quantite": 150,
    "format": "85x55",
    "papier": "couche_mat_350",
    "impression": "quadri_rv",
    "coins": "vifs",
    "pelliculage": "aucun",
    "orientation": "portrait"
  },
  "client_code": "DEMO001"
}

Exemple — Brochure 3 axes

{
  "produit_code": "brochure",
  "caracteristiques": {
    "quantite": 250,
    "format": "A5",
    "nb_pages": 16,
    "papier_int": "couche_115",
    "papier_couv": "couche_250",
    "reliure": "2pts_metal"
  },
  "client_ca": 7500
}

Réponse succès (200)

{
  "success": true,
  "produit": { "code": "carte_visite", "nom": "Carte de visite" },
  "calcul": {
    "combinaison_demandee": { "quantite": 150, "format": "85x55" },
    "prix_base_interpolé": 21.25,   // interpolé entre palier 100 et 200
    "coef_options_total": 1.35,    // produit de tous les coefs options
    "detail_options": [
      { "option": "impression", "libelle": "Quadri recto/verso",
        "coefficient": 1.35, "neutre": false, "defaut": false },
      // ... options neutres avec coefficient=1.0
    ],
    "prix_production": 28.6875,
    "marge": { "label": "Client régulier", "coefficient": 1.35 }
  },
  "prix": {
    "ht":  38.73,
    "ttc": 46.48,
    "tva": 7.75
  },
  "client": { "code": "DEMO001", "nom": "Client démo", "ca_cumule_ht": 7500 }
}

GET /api.php?route=produits

Liste des produits actifs avec dimensions, valeurs disponibles et options.

Réponse

{
  "success": true,
  "produits": [
    {
      "code": "carte_visite",
      "nom": "Carte de visite",
      "description": "Cartes de visite en 3 formats.",
      "dimensions": [
        {
          "code": "quantite", "libelle": "Quantité",
          "type": "numerique", "unite": "ex",
          "valeurs_disponibles": [50, 100, 200, 300, 400, 500, 1000]
        },
        {
          "code": "format", "libelle": "Format",
          "type": "liste", "unite": null,
          "valeurs_disponibles": ["55x55", "85x55", "90x50"]
        }
      ],
      "options": [
        {
          "code": "papier", "libelle": "Papier",
          "valeurs": [
            { "code": "couche_mat_350", "libelle": "Couché mat 350g",
              "coefficient": 1.0, "est_defaut": true },
            { "code": "creation_300", "libelle": "Papier création 300g",
              "coefficient": 1.15, "est_defaut": false }
          ]
        }
        // ... autres options
      ]
    }
    // ... autres produits
  ]
}

GET /api.php?route=produits/{code}

Détail d'un seul produit (même structure qu'un élément de la liste).

GET /api.php?route=produits/carte_visite
Headers: X-API-Key: n8n-key-2026

Codes d'erreur

HTTPMessageCause
401Clé API invalide ou manquanteHeader X-API-Key absent ou incorrect
400Corps de requête JSON invalideJSON malformé
400Champ obligatoire manquantproduit_code ou caracteristiques absent
400Dimension manquante : XUne dimension de prix attendue n'est pas dans caracteristiques
400Valeur 'X' inconnue pour l'option 'Y'La valeur fournie ne correspond à aucune option_valeur en base
404Produit introuvable ou inactifLe produit_code n'existe pas ou est désactivé
404Aucun prix trouvéLa combinaison liste demandée n'a aucune entrée dans la grille
500Erreur interneErreur DB ou moteur — voir le message détaillé

Format d'erreur

{
  "success": false,
  "error": "Message explicite",
  "code": 400
}

Intégration n8n

NœudHTTP Request
MethodPOST
URLhttp://[IP_SERVEUR]/deviseurapi_v2/api.php?route=calculer
Header nameX-API-Key
Header valuen8n-key-2026
Body content typeJSON
BodyObjet avec produit_code et caracteristiques
Récupérer le prix dans le workflow :
{{ $json.prix.ht }} — prix HT  ·  {{ $json.prix.ttc }} — prix TTC  ·  {{ $json.calcul.marge.label }} — palier marge appliqué

Tester avec curl

Lister les produits

curl -H "X-API-Key: n8n-key-2026" \
     http://[IP_SERVEUR]/deviseurapi_v2/api.php?route=produits

Calculer un prix

curl -X POST \
     -H "X-API-Key: n8n-key-2026" \
     -H "Content-Type: application/json" \
     -d '{"produit_code":"carte_visite","caracteristiques":{"quantite":150,"format":"85x55"}}' \
     http://[IP_SERVEUR]/deviseurapi_v2/api.php?route=calculer