Point final « Commandes » (Orders)

Endpoint

Commandes v2.32.0

Lire, créer et modifier des commandes, supprimer des entrées de l'historique.


Aperçu

OpérationMéthodePoint de terminaisonPortée
ExportationGET/xpanel/xoport/Export/JSON/ordersorders:read
CréerPOST/xpanel/xoport/Import/JSON/ordersorders:write
Mise à jourPUT/xpanel/xoport/Import/JSON/ordersorders:write
Supprimer une entrée d'historiqueDELETE/xpanel/xoport/Delete/JSON/order_status_history/{id}orders:write

Remarque : l'importation et la suppression d'entrées d'historique nécessitent l'utilisation de orders:write. L'API ne supprime pas les commandes elles-mêmes : DELETE /Delete/JSON/orders renvoie un code HTTP 501 NOT_IMPLEMENTED. L'enregistrement en stock s'effectue automatiquement lors de la création. Seule l'API DELETE /Delete/JSON/order_status_history/{id} permet de supprimer une entrée d'historique : le statut de la commande est alors mis à jour, et la boutique rejette l'entrée la plus ancienne d'une commande (HTTP 409 FIRST_HISTORY_ENTRY). Détails : API de suppression.


Importation (POST / PUT)

Crée ou met à jour une commande. POST = Créer, PUT avec orders_id = Mettre à jour. Tous les champs sont vérifiés et enregistrés par le même service que celui utilisé pour créer les commandes lors des importations depuis les places de marché.

Charge utile minimale (Création)

{
  "data": [{
    "customers_id": 51,
    "payment_method": "PayPal",
    "products": [
      {"products_id": 42, "quantity": 2, "products_price": "29.99"}
    ]
  }]
}

Charge utile complète avec toutes les options

{
  "data": [{
    "customers_id": 51,
    "language_id": 2,
    "payment_method": "Stripe",
    "shipping_method": "DHL",
    "tax_flag": 1,
    "totals_mode": "auto",
    "expected_total": "59.98",
    "strict_totals": true,
    "currency": "EUR",
    "products": [
      {
        "products_id": 42,
        "quantity": 2,
        "products_price": "29.99",
        "products_tax": "19.00",
        "attributes": [
          {"option_id": 1, "value_id": 5}
        ]
      }
    ],
    "external_reference": {
      "source": "amazon",
      "external_id": "AMZ-12345"
    },
    "tracking": [
      {"service_provider": "DHL", "code": "1234567890", "link": "https://nolp.dhl.de/?piececode=1234567890"}
    ]
  }]
}

Modes de calcul des totaux (v2.21.0)

Le paramètre « totals_mode » permet de contrôler la manière dont les montants totaux des commandes sont calculés :

ModeComportementUtilisation
auto Par défautAucune valeur « totals » dans la charge utile → la boutique recalcule entièrement les montants. Avec des valeurs « totals » → celles-ci sont reprises.Cas par défaut : l'appelant ne dispose d'aucun total, la boutique les calcule.
recalcCharge les valeurs « products_price » et « products_tax » à partir de la base de données (prix par groupe de clients + promotions + remise par catégorie/client, en fonction du pays) et recalcule le sous-total, la TVA et le total. De plus, le prix d'achat (products_ek_price) et le GTIN sont rechargés. Les lignes manuelles (products_id=0) restent inchangées.Forcer un recalcul sécurisé ; parité dropship lors du paiement.
verbatimLa boutique reprend à l’identique les valeurs « totals » transmises, SANS recalcul.Importations depuis des places de marché avec un montant total fixe (Amazon, Otto, eBay).

tax_flag Déduction automatique et interprétation des prix

Si tax_flag n’est pas explicitement défini, il est dérivé du groupe de clients :

  • customers_groups.show_tax = 1 + DISPLAY_PRICE_WITH_TAX = true → tax_flag = 1 (brut)
  • customers_groups.show_tax = 0 → tax_flag = 0 (net)
  • Groupes exonérés de taxe (par ex. numéro d'identification TVA UE) → tax_flag = 2 (exonéré de taxe)

Interprétation de « products_price » en fonction de tax_flag

tax_flagproducts_price estot_subtotalot_taxot_total
0 (net)netΣ(net × qté)Σ(net × taux/100), additionnéSous-total + Frais de port + Taxes
1 (brut)brutΣ(brut × qté)à titre indicatif (« TVA comprise »)Sous-total + frais de port (TVA NON incluse)
2 (hors taxes)net = brutΣ(prix × quantité)0Sous-total + frais de port

⚠️ Important pour les importations depuis une place de marché : si la place de marché envoie des prix nets, la variable « tax_flag: 0 » DOIT être explicitement définie — sinon, les prix (pour un groupe de clients « brut ») seront interprétés comme des prix bruts.

Depuis la version v2.122.8, les lignes de commande présentant un montant de TVA négatif, comme les remboursements, se voient attribuer une ligne de TVA identique à celle de la page de paiement. Lors de l’ajout de lignes de commande via PUT, la TVA des lignes négatives est prise en compte. Les nouvelles lignes enregistrent, lors de leur création, s’il s’agit d’une marchandise ou d’un service ; les documents relatifs aux livraisons et prestations intracommunautaires restent ainsi inchangés.

Origine du prix

Le fait qu’un montant soit interprété comme net ou brut dépend de qui l’a déterminé : l’interface (Payload) ou la boutique (base de données, module d’expédition).

Originetax_flag = 0 (Net)tax_flag = 1 (Brut)tax_flag = 2 (hors taxes)
Interface : prix dans les modes auto et verbatim, recalc- articles sans correspondance dans la boutique ou sans products_id, propres attributes[].price, totals.shippingnet, TVA en susbrut, TVA comprise. La boutique enregistre le prix net de l’article et les suppléments liés aux caractéristiques propres (depuis la v2.122.11)net, pas de TVA
Boutique : résultats de recherche sur recalc(prix de groupe, prix spécial, remise par catégorie), caractéristiques présélectionnées (apply_default_attributes), expédition depuis compute_shippingnet, TVA en susnet, extrapolé : ligne = net × (1 + taux/100)net, pas de taxe
Articles via PUT avec products_mode: "append"montant netnetnet
Modifié dans la version 2.122.11 :
  • les prix des lignes de commande envoyés en brut par l'interface tax_flag = 1 sont enregistrés par la boutique en net (÷ (1 + taux/100), 8 décimales), comme pour une commande passée depuis la caisse. Auparavant, le prix brut figurait dans la ligne de commande, et l'éditeur de commande, le PDF de la facture, l'e-mail de commande ainsi que l'ajout ultérieur de lignes de commande appliquaient la taxe une deuxième fois.
  • orders:read fournit désormais ces lignes de commande au prix net (products_price, final_price, attributes[].options_values_price) : 10,00 à 19 % devient 8.40336134. Les interfaces qui lisent ces champs et les comparent aux données envoyées procèdent à la conversion. Les lignes de totalisation, order_total/tax_total de la réponse et le contrôle de cohérence restent inchangés.
  • Dans deux cas, c’est désormais la valeur de caisse qui s’applique : le supplément lié aux caractéristiques présélectionnées (apply_default_attributes) sur un tel poste est inclus dans le calcul de la taxe, et un barème de frais de port en fonction de la valeur des marchandises (compute_shipping) utilise la valeur nette. Les frais de port et le montant total peuvent ainsi varier ; une méthode de calcul des frais de port ( expected_total ) adaptée à l’ancienne valeur renvoie alors « TOTAL_DRIFT ».
  • Les commandes existantes ne sont pas converties. Si l’on ajoute un élément à une ancienne commande dont les lignes sont enregistrées en brut, la double taxation reste en vigueur.
  • La ligne d’expédition d’une commande nette (tax_flag = 0) comporte tax 0 et le taux d’imposition indiqué dans tax2, comme pour une commande nette issue de la caisse ; les commandes exonérées d’impôt comportent également 0 et 0 en mode verbatim, tandis que les commandes brutes conservent, comme auparavant, le taux indiqué dans les deux colonnes. Si vous lisez le taux d’expédition uniquement à partir de totals[].tax, utilisez tax2 pour les commandes nettes. Les totaux restent identiques, les commandes enregistrées ne sont pas modifiées ; la facture électronique de ces commandes indique désormais le montant correct pour les frais d’expédition.
  • Lors de l’ajout de postes via PUT, la taxe d’expédition d’une commande nette provenant de la caisse est désormais prise en compte ; auparavant, elle n’apparaissait pas dans le total général.

Champ de ligne service lors de la création

Depuis la v2.122.8, chaque article nouvellement créé (POST et PUT avec products_mode: "append") enregistre s’il s’agit d’une marchandise (0) ou d’un service (1). Cette valeur détermine, sur la facture et la facture électronique, la mention fiscale relative aux livraisons ou prestations intracommunautaires ainsi que l’exclusion du droit de rétractation.

En l’absence de ce champ, la boutique détermine la valeur à partir du produit, à l’instar de la caisse et de l’éditeur de commande :

Positionservice
Champ « Service » coché1
Poids 0 (y compris celui des caractéristiques) et fichier à télécharger, lorsque le téléchargement des produits est activé1
tous les autres produits0
poste libre sans products_id0

Nouveauté de la version v2.122.11 : avec ce champ, la valeur envoyée s’applique, même si elle contredit les données du produit, par exemple pour un poste de service libre :

curl -X POST "https://shop.de/xpanel/xoport/Import/JSON/orders" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"orders","data":[{"customers_id":123,"products":[
       {"products_name":"Programmierung Schnittstelle","products_quantity":3,
        "products_price":150.00,"products_tax":0,"service":1}]}]}'
  • Les valeurs autorisées sont 1, 0, true, false, "1" et "0". Aucune autre valeur n’est prise en compte : la réponse indique « service_invalid » dans « records[].warnings », et la valeur provient du produit.
  • Uniquement lors de la création. Les lignes existantes conservent leur valeur : products_mode: "update" rejette service, l'enregistrement échoue avec FIELD_NOT_UPDATABLE, et rien n'est écrit, pas même les autres champs (réponse HTTP 200 comme pour toute importation groupée). Pour corriger cela, annulez la ligne et rajoutez-la avec service.
  • Les boutiques jusqu’à la version 4.9.170 ne reconnaissent pas ce champ : il est ignoré sous la forme UNKNOWN_FIELD (avec ?_strict=true et un code HTTP 400), et un poste de service libre y est considéré comme une marchandise. Pour savoir si une boutique reconnaît ce champ, consultez api_version dans GET /me.
  • L'exportation fournit la valeur par ligne dans products[].service: 0, 1 ou null pour les anciennes commandes sans valeur enregistrée.

language_id Auto-Derive (v2.21.0)

Si language_id ne figure pas dans la charge utile, la résolution s'effectue en cascade :

  1. valeur de la charge utile (si définie)
  2. customers.language_id issu de la fiche client
  3. DEFAULT_LANGUAGE issu de la configuration de la boutique (recherche de code dans la table « languages »)
  4. Solution de secours : 1 (anglais)

Remarque : dans le contexte xoPort, « $_SESSION['languages_id'] » n’ est délibérément PAS une solution de secours — sinon, la langue de l’appelant de l’API d’administration serait transmise par inadvertance à la commande client.


Contrôle de dérive : expected_total + strict_totals

En option, l’appelant peut envoyer le montant total attendu — la boutique effectue une comparaison et déclenche une alerte en cas d’écart :

  • expected_total (décimal) : montant total attendu de l’ ot_total après calcul.
  • strict_totals (booléen, par défaut false) :
    • false → L'écart est signalé sous forme d'avertissement dans la réponse, mais la commande est tout de même créée.
    • true → La commande est refusée si le total calculé ≠ expected_total (tolérance : 0,01 €).

Utilisation : importations depuis une place de marché où celle-ci connaît déjà le montant final — la boutique vérifie que le produit « prix × quantité × taxe + frais de port » donne le même montant localement.


Champs de commodité et parité de paiement (v2.28.0–v2.32.0)

Pour les intégrations qui ne connaissent que le numéro de client, une adresse de livraison différente et la référence/quantité — la commande est créée de manière à ce qu’elle reprenne exactement les prix, les caractéristiques, les frais de port et la confirmation d’une commande manuelle passée sur la boutique (parité dropshipping, par exemple SPV → SST).

Champ / ComportementTypeDescription
Remplissage automatique de l'adresseautoEn cas d’ customers_id > 0 et d’ billing manquant ou incomplet, l’adresse de facturation par défaut du client est chargée. Les champs explicitement fournis prévalent. delivery revient à billing si des champs obligatoires sont manquants. v2.28.0
Résolution des codes SKU/products_modelautoLes lignes de commande ne peuvent fournir que l'{products_model, quantity} — products_id et le nom sont récupérés depuis la base de données de la boutique. Modèle inconnu → avertissement PRODUCT_MODEL_NOT_FOUND. v2.28.0
apply_default_attributesbool (par défaut : false)Pour chaque position ne disposant pas de ses propres attributes, récupère les valeurs d’options présélectionnées, y compris le supplément signé — y compris les caractéristiques d’affichage (type d’option 5, par exemple « version »/« indice de protection »), telles qu’elles sont transmises lors du passage à la caisse. v2.28.0 / v2.30.0
compute_shippingbool ( false par défaut)En l’absence d’ totals.shipping explicite, le mode de livraison le moins cher est calculé « en arrière-plan » à l’aide du calculateur de frais de port du front-end pour l’adresse de livraison, puis enregistré sous la forme ot_shipping. Best-effort : erreur → avertissement SHIPPING_AUTO_FAILED / SHIPPING_AUTO_EMPTY, la commande est conservée. v2.30.0 Depuis la v2.122.9, la ligne de frais de port est également créée lorsque la valeur des marchandises est égale à 0 (taux d’imposition : le taux le plus élevé des articles ; en l’absence de celui-ci, le taux du mode de livraison).
send_confirmation_emailbool (par défaut false)Une fois la création effectuée, la confirmation de commande standard est envoyée au client (y compris les copies provenant de SEND_EXTRA_ORDER_EMAILS_TO). Résultat sous forme de « confirmation_email_sent » (true/false) dans l'enregistrement. v2.29.0
Remise par catégorie/client dans le recalcmode automatiqueLe mode « recalc » applique, en plus du prix de groupe et des offres spéciales, la remise par catégorie/client (customers_discount + customers_groups_discount, y compris l’héritage des sous-catégories) — c’est le prix effectif le plus avantageux qui prévaut. Problème → Avertissement CATEGORY_DISCOUNT_UNAVAILABLE. v2.31.0
additional_addresschaîneComplément d’adresse par bloc d’adresse — est repris selon customers_additional_address, delivery_additional_address et billing_additional_address. v2.32.0

Ligne fiscale par enregistrement (v2.32.0) : ot_tax est généré pour chaque taux d’imposition avec une libellé précis au format front-end — « TVA de 19 % en sus » (net) ou « TVA de 19 % incluse » (brut), à condition que MODULE_ORDER_TOTAL_PREFIX=true.


Sous-ressources

external_reference — Connexion à la place de marché

Relie la commande à une source externe. Champs autorisés :

  • source (chaîne de caractères, obligatoire) : par exemple amazon, ebay, otto, kaufland.
  • external_id (chaîne de caractères, obligatoire) : identifiant/numéro sur la place de marché.
  • marketplace_id (int, facultatif) : identifiant interne de la place de marché XONIC.

tracking — Suivi d'expédition

Tableau d’entrées de suivi. Autorisé par entrée :

  • service_provider (alias : method) : nom du transporteur (DHL, DPD, UPS, …).
  • code (alias : tracking_number) : numéro d'envoi.
  • link: URL de suivi.
  • label_link: URL de l'étiquette d'expédition (PDF).
  • external_id: ID auprès du prestataire de services d'expédition.
  • is_retoure (bool) : envoi de retour au lieu d’un envoi initial.

status_history — Historique des statuts

Journal d'audit en mode « append-only ». Par entrée : orders_status_id, comments, customer_notified (0/1), date_added.

customer_notified Au niveau de la commande

Booléen, détermine si l’envoi d’un e-mail de confirmation est déclenché lors d’un changement de statut.


Exemple de requête (Création)

curl -X POST "https://shop.de/xpanel/xoport/Import/JSON/orders" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [{
      "customers_id": 51,
      "payment_method": "PayPal",
      "tax_flag": 0,
      "expected_total": "71.38",
      "products": [{"products_id": 42, "quantity": 2, "products_price": "29.99", "products_tax": "19.00"}]
    }]
  }'

Exemple de réponse (succès)

{
  "success": true,
  "api_version": "2.32.0",
  "type": "orders",
  "operation": "create",
  "data": [{
    "orders_id": 46482,
    "customers_id": 51,
    "ot_subtotal": "59.98",
    "ot_tax": "11.40",
    "ot_total": "71.38",
    "totals_mode": "auto",
    "tax_flag": 0,
    "language_id": 2
  }],
  "warnings": []
}

Exemple de réponse (vérification de dérive échouée, strict_totals=true)

{
  "success": false,
  "api_version": "2.32.0",
  "error": {
    "code": "TOTAL_DRIFT",
    "message": "Calculated ot_total 71.38 differs from expected_total 70.00 (diff: 1.38).",
    "details": {"expected": "70.00", "calculated": "71.38", "tolerance": "0.01"}
  }
}

Codes d'erreur

CodeSignification
INVALID_PAYLOADChamps obligatoires manquants ou type de données incorrect.
CUSTOMER_NOT_FOUNDcustomers_id n'existe pas.
PRODUCT_NOT_FOUNDproducts_id n'existe pas.
TOTAL_DRIFTexpected_total ≠ total calculé et strict_totals=true.
STOCK_INSUFFICIENTLe stock est insuffisant (si auto_stock=true).
DUPLICATE_EXTERNAL_REFERENCELa combinaison source + external_id existe déjà.

Avertissements non critiques (la commande est tout de même créée, retour dans warnings[]) : PRODUCT_MODEL_NOT_FOUND, RECALC_PRODUCT_NOT_FOUND, CATEGORY_DISCOUNT_UNAVAILABLE, SHIPPING_AUTO_FAILED, SHIPPING_AUTO_EMPTY, TOTAL_DRIFT (sauf pour strict_totals=true), UNKNOWN_FIELD.


Exportation (GET)

Lecture des commandes avec GET /orders, Scope orders:read.

ParamètresTypeDescription
statusintStatut de la commande
date_from, date_toDate et heureDate de commande (du… au…)
sinceDateComparaison : modifié ou commandé à partir de cette date
last_modifiedDateNouveauté de la version v2.122.10: autre orthographe de « since » (remarque : FILTER_ALIAS) ; les deux, avec des dates différentes, génèrent une erreur HTTP 400
customer_idintCommandes d'un client
products_id, products_model, categories_idint / string / intCommandes contenant cet article ou un article de la catégorie
marketplace_idintPlace de marché de la commande
external_id, sourcechaîneNuméro de commande ou source de l'intégration à la place de marché
po_numberchaîneRéférence de la commande
delivery_countrychaîneNouveauté de la version v2.122.9: pays de livraison sous forme de code ISO à deux ou trois chiffres, plusieurs codes séparés par des virgules ; un code inconnu génère une erreur HTTP 400
sort, orderchaîneTri de la liste (par défaut : ordre croissant selon orders_id)
limit, offset, pageintDéfilement

Formes de sentiers

  • /order/{id}, /orders/{von}:{bis}, /orders/{von}: et /orders/new:{datum} (classés par date).
  • Depuis la version 2.122.9, les filtres s'appliquent en plus de la forme de chemin. Jusqu'à la version 2.122.8, un filtre remplaçait la forme de chemin : /order/{id}?status=3 renvoyait toutes les commandes ayant le statut 3.
  • Depuis la v2.122.10, les formes de chemin parcourent la base de données par ordre croissant d’ID. Sans ?limit=, la réponse reste non triée jusqu’à la limite maximale ; au-delà, elle est renvoyée en taille standard avec has_more. new:{datum} est vérifié (YYYY-MM-DD, YYYY-MM-DD HH:MM ou YYYY-MM-DD HH:MM:SS), sinon une erreur HTTP 400 est renvoyée INVALID_RANGE.
  • v2.122.12 Le segment suivant /order ou /orders est un nombre entier comportant au maximum 18 chiffres, une plage délimitée par des nombres entiers ou new:{datum} suivi d’un deux-points non codé ; toute autre valeur génère une erreur HTTP 400 INVALID_RANGE. Les espaces en bordure ne sont pas pris en compte : /order/42%20 correspond à la commande n° 42.
Modifié dans la version v2.122.12 :
  • /orders/new%3A2026-10-01 (les deux-points encodés, par exemple avec urlencode()) renvoyaient jusqu’à la version v2.122.11 un code HTTP 200 avec la liste complète au lieu du delta, ce qui impliquait une synchronisation sur l’ensemble du catalogue. Désormais, un code HTTP 400 est renvoyé : envoyez les deux-points non encodés après new.
  • /order/42x, /order/42%2B et /orders/5%3A10 renvoyaient la liste, tandis que /order/42.0, /order/+5 et /orders/100.0:200.0 renvoyaient l'enregistrement ou la plage de données souhaitée. Toutes ces requêtes renvoient désormais un code HTTP 400. Envoyer l'ID sous forme de nombre entier sans décimales, ce qui est courant pour les valeurs issues de tables.
  • /order/42%20 et /order/42%0A ont fourni la liste et correspondent désormais à la commande n° 42.

Valeurs non valides

  • Depuis la v2.122.10, les dates et heures doivent être exprimées sous des formats fixes : YYYY-MM-DD, YYYY-MM-DD HH:MM ou YYYY-MM-DD HH:MM:SS, avec ou sans fuseau horaire (Z ou ±HH:MM; envoyer le signe « + » sous la forme %2B ). Les entrées telles que yesterday ou 01.10.2026 renvoient une erreur HTTP 400 INVALID_FILTER_VALUE.
  • Depuis la version v2.122.10, les valeurs sous forme de liste telles que ?customer_id[]=5, ainsi qu’une liste séparée par des virgules, un texte ou un nombre décimal envoyés à status, customer_id, marketplace_id, products_id et categories_id, génèrent une erreur HTTP 400 INVALID_FILTER_VALUE avec details[]. Auparavant, un tel filtre était ignoré et la réponse contenait toutes les commandes. Seul delivery_country accepte plusieurs valeurs.
  • Une valeur vide est considérée comme non définie. Les paramètres inconnus sont signalés par warnings[] sous la forme UNKNOWN_FILTER, tandis que ?_strict=true renvoie une erreur HTTP 400.

Données de base sur les statuts de commande (order_statuses)

Nouveauté de la v2.122.10: tous les statuts de commande avec leur nom dans chaque langue et leur signification, portée orders:read. Jusqu’à présent, un statut n’apparaissait que sur la commande, sous forme d’ID et avec son nom dans une seule langue.

curl "https://shop.de/xpanel/xoport/Export/JSON/order_statuses" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
{
  "success": true,
  "api_version": "2.122.10",
  "type": "order_statuses",
  "data": [
    {
      "orders_status_id": 5,
      "orders_status_label": "secondary",
      "orders_status_label_bg": "#000000",
      "orders_status_label_color": "#ffffff",
      "orders_status_sort_order": 0,
      "is_default": false,
      "is_cancelled": true,
      "is_offer": false,
      "counts_as_revenue": false,
      "is_paid": false,
      "is_shipped": false,
      "languages": {
        "en": { "language_id": 1, "language_code": "en", "orders_status_name": "Returned/Cancelled" },
        "de": { "language_id": 2, "language_code": "de", "orders_status_name": "Retoure/Storniert" }
      }
    }
  ],
  "stats": { "total": 1, "count": 1, "timestamp": "2026-10-15 10:00:00" }
}

Indicateurs

IndicateursSignification
is_defaultStatut des nouvelles commandes
is_cancelledAnnulation : la boutique réintègre le stock
is_offerDevis (onglet dédié « Devis » dans l’interface d’administration)
counts_as_revenueni annulation ni offre ; même distinction qu’entre order_stats.orders_count_valid et /customers. Ne donne aucune indication sur le paiement ou l’expédition
is_paidpayé (paiement reçu)
is_shippedexpédiée ; les statuts d’annulation ne sont jamais is_shipped, même si la boutique les répertorie dans sa liste d’expédition (réglage par défaut de la série 4.9 : 3,5)

Les indicateurs suivent les paramètres de statut de la boutique. Un paramètre vide n'indique aucun statut. Absents de l'enregistrement : « retourné », « clôturé » et paiement partiel.

Formats de chemin et paramètres

  • /order_statuses: tous les statuts, classés par ordre croissant selon orders_status_id.
  • /order_status/{id} et /order_statuses/{id}: exactement ce statut, sans résultat (HTTP 404 NOT_FOUND).
  • /order_statuses/{von}:{bis} et /order_statuses/{von}:: plage, vide = HTTP 200 avec data vide.
  • Pas de filtres ; ?language= ne change rien, toutes les langues s’affichent systématiquement. new:{datum} renvoie un HTTP 400 INVALID_RANGE.

orders_status_label correspond à la classe de couleur de la liste du backend (custom = couleurs personnalisées issues de orders_status_label_bg et orders_status_label_color), orders_status_sort_order à l'ordre des listes de sélection. La ligne correspondant à la langue « Allemand » est renvoyée, comme sur /orders.