1

Sélectionnez votre région pour vérifier les prix dans votre devise, le taux de TVA et les frais de livraison.

Endpoint

GET https://external-api.mddlinx.com/externalapi/categories

Renvoie l'arborescence complète du catalogue : catégories et produits (symboles) avec leurs noms dans plusieurs langues, leurs descriptions, leurs types d'éléments. La réponse contient une collection d'éléments qui peuvent avoir des éléments imbriqués (sous-catégories/groupes).

Request

Headers
  • Accept string
    Possible values: application/json

    Type de réponse attendu.

    Default value: application/json

Response

JSON
{
  "Elements": [
    {
      "Id": 0,
      "DescriptiveName": "Root",
      "Key": "0",
      "Name": [
        { "LangSymbol": "FR", "Value": "Racine" }
      ],
      "Description": [],
      "Picture": "",
      "Products": [],
      "Elements": [
        {
          "Id": 527865,
          "DescriptiveName": "Tous",
          "Key": "1",
          "Name": [
            { "LangSymbol": "EN", "Value": "All products" },
            { "LangSymbol": "FR", "Value": "Tous les produits" }
          ],
          "Description": [],
          "Picture": "",
          "Products": [],
          "Elements": [
            {
              "Id": 101675,
              "DescriptiveName": "Ultra",
              "Key": "101675",
              "Name": [
                { "LangSymbol": "EN", "Value": "Ultra" },
                { "LangSymbol": "FR", "Value": "Ultra" }
              ],
              "Description": [
                { "LangSymbol": "EN", "Value": "chair polished aluminium base" },
                { "LangSymbol": "FR", "Value": "chaise base aluminium poli" }
              ],
              "Picture": "",
              "Products": [
                { "Symbol": "UFBPP19",  "DirectDigital": 1 },
                { "Symbol": "UFPP19K",  "DirectDigital": 1 }
              ],
              "Elements": [],
              "Type": 4,
              "TypeName": "Symbole virtuel",
              "DirectDigital": 1,
              "JoinID": 0,
              "IsMain": 1,
              "IsHidden": 0,
              "MainKeyForElement": 101675,
              "InvisibleOnPricelist": 0,
              "InvisibleOnPricelistCurrencies": [ "SEK" ]
            }
          ],
          "Type": 1,
          "TypeName": "Catégorie",
          "DirectDigital": 1,
          "JoinID": 0,
          "IsMain": 0,
          "IsHidden": 0,
          "MainKeyForElement": 1,
          "InvisibleOnPricelist": 0,
          "InvisibleOnPricelistCurrencies": []
        }
      ],
      "Type": 0,
      "TypeName": "Root",
      "DirectDigital": 1,
      "JoinID": 0,
      "IsMain": 0,
      "IsHidden": 0,
      "MainKeyForElement": 0,
      "InvisibleOnPricelist": 0,
      "InvisibleOnPricelistCurrencies": []
    }
  ]
}
  • Elements array<object> Required

    Liste des éléments de l'arborescence du catalogue (catégories, groupes, symboles virtuels, etc.).

  • Elements[].Id integer Required

    Identifiant de l'élément dans la base de données.

  • Elements[].DescriptiveName string|null

    Nom descriptif de l'élément (souvent plus « lexical » que Name[].Value).

  • Elements[].Key string Required

    Clé abstraite de l'élément (chaîne de caractères utilisée dans le catalogue).

  • Elements[].Name array<object>

    Noms de l'élément dans différentes langues.

  • Elements[].Name[].LangSymbol string Required
    Possible values: PL EN DE ES FR IT

    Code de langue (deux lettres, par exemple PL, EN, DE).

  • Elements[].Name[].Value string Required

    Nom de l'élément dans la langue donnée.

  • Elements[].Description array<object>

    Descriptions de l'élément dans différentes langues.

  • Elements[].Description[].LangSymbol string Required
    Possible values: PL EN DE ES FR IT

    Code de la langue de la description.

  • Elements[].Description[].Value string Required

    Description dans la langue donnée (peut être vide).

  • Elements[].Picture string

    URL de l'image associée à l'élément (le cas échéant).

  • Elements[].Products array<object>

    Liste des produits (symboles) associés à l'élément (par exemple, à la catégorie / famille).

  • Elements[].Products[].Symbol string Required

    Symbole du produit (SKU).

  • Elements[].Products[].DirectDigital integer Required
    Possible values: 0 1

    Indicateur de disponibilité du symbole dans Direct Digital (0 – non, 1 – oui).

  • Elements[].Elements array<object>

    Éléments imbriqués (sous-catégories / groupes / nœuds d'arborescence) ayant la même structure que Elements[].

  • Elements[].Type integer Required

    Code du type d'élément (par exemple, racine, catégorie, symbole virtuel – signification exacte côté système).

  • Elements[].TypeName string Required

    Nom du type d'élément (par exemple, « Racine », « Symbole virtuel », « Catégorie »).

  • Elements[].DirectDigital integer
    Possible values: 0 1

    Indicateur précisant si l'élément (branche) est disponible dans Direct Digital.

  • Elements[].JoinID integer

    ID de l'élément auquel il est lié (par exemple, l'enregistrement « original »).

    Default value: 0
  • Elements[].IsMain integer
    Possible values: 0 1

    Si l'élément est l'élément principal (1 – oui, 0 – non).

    Default value: 0
  • Elements[].IsHidden integer
    Possible values: 0 1

    Si l'élément doit être masqué sur la page (1 – masqué, 0 – visible).

    Default value: 0
  • Elements[].MainKeyForElement integer

    Clé de l'élément parent/principal, si celui-ci n'est pas principal.

    Default value: 0
  • Elements[].InvisibleOnPricelist integer
    Possible values: 0 1

    Si l'élément doit être invisible dans la liste des prix (1 – masqué, 0 – visible).

    Default value: 0
  • Elements[].InvisibleOnPricelistCurrencies array<string>

    Liste des codes de devises pour lesquels l'élément doit être masqué dans la liste des prix.

JSON
{
  "status": 500,
  "error": "server_error",
  "message": "Une erreur du serveur est survenue."
}

Implementation

Exemples d'appel de point de terminaison (GET anonyme, sans en-tête Authorization) pour /externalapi/categories.

PHP
<?php
declare(strict_types=1);

$endpoint = 'https://external-api.mddlinx.com/externalapi/categories';

$ch = curl_init($endpoint);
curl_setopt_array($ch, [
    CURLOPT_HTTPGET        => true,
    CURLOPT_HTTPHEADER     => [
        'Accept: application/json',
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);

$body  = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$http  = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($errno) {
    throw new RuntimeException($error);
}
if ($http < 200 || $http >= 300) {
    throw new RuntimeException('HTTP ' . $http . ': ' . $body);
}

$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($data);
Laravel
<?php
use Illuminate\Support\Facades\Http;

$endpoint = 'https://external-api.mddlinx.com/externalapi/categories';

$response = Http::acceptJson()
    ->timeout(60)
    ->get($endpoint);

if ($response->failed()) {
    throw new RuntimeException('HTTP ' . $response->status() . ': ' . $response->body());
}

$tree = $response->json();
print_r($tree);
JS
const endpoint = 'https://external-api.mddlinx.com/externalapi/categories';

(async () => {
  const res = await fetch(endpoint, {
    method: 'GET',
    headers: {
      'Accept': 'application/json'
    }
  });

  if (!res.ok) {
    throw new Error('HTTP ' + res.status + ': ' + (await res.text()));
  }

  const data = await res.json();
  console.log(data);
})();
Python
import requests

endpoint = 'https://external-api.mddlinx.com/externalapi/categories'

r = requests.get(
    endpoint,
    headers={
        'Accept': 'application/json',
    },
    timeout=60,
)
r.raise_for_status()

print(r.json())
C#
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

class Program {
  static async Task Main() {
    var endpoint = "https://external-api.mddlinx.com/externalapi/categories";

    using var http = new HttpClient();
    http.DefaultRequestHeaders.Accept.ParseAdd("application/json");

    var res  = await http.GetAsync(endpoint);
    var body = await res.Content.ReadAsStringAsync();

    if (!res.IsSuccessStatusCode)
      throw new Exception("HTTP " + (int)res.StatusCode + ": " + body);

    Console.WriteLine(body);
  }
}