Référence API · FuturWeb

Référence de l'API Futurlog

API REST / JSON pour connecter vos systèmes à la logistique Futurlog : commandes, produits, stock, réceptions et retours. Vos programmes appellent nos web services pour piloter vos flux en continu.

Introduction

Les Web Services Futurlog (FuturWeb) permettent d'échanger des informations entre vos systèmes et ceux de Futurlog. Le principe : ce sont vos programmes qui appellent nos services pour transmettre (descente) vos catalogues et commandes, et pour récupérer (remontée) le stock, les statuts et le tracking. L'API est REST et échange du JSON.

Authentification

Chaque appel s'authentifie directement dans l'URL, via votre code marchand, votre login et votre clé. La structure générale d'une requête est :

https://jws.futurlog.com/{Application}/{Action}/{MerchantCode}/{Login}/{Key}/{Parameter}
ParamètreDescription
MerchantCodeVotre code marchand, 3 caractères alphanumériques.
LoginVotre identifiant. En environnement de test, il est suffixé par -test.
KeyVotre clé secrète de 64 caractères [a-Z0-9]. Distincte entre test et production.
Test vs production. L'environnement de test utilise un login suffixé -test et une clé différente. Validez vos intégrations en test avant de basculer sur les identifiants de production.

Format & gestion des erreurs

Toutes les requêtes envoient l'en-tête Accept: application/json. Une réponse réussie renvoie un code HTTP 200 (un booléen pour les créations, une liste pour les lectures). En cas d'échec, le corps contient un objet Error :

{
  "Error": {
    "Message": "...",
    "Code": "E_UNKNOWN_MERCHANT",
    "Data": [ { "Key": "...", "Value": "..." } ]
  }
}

Commandes

POST

Créer une nouvelle commande

Transmet une commande à préparer et expédier. Le numéro de commande est obligatoire et unique.

/Order/CreateNewOrder/{merchantCode}/{login}/{key}
Corps
Objet Order (voir modèles)
Réponse
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_ORDERE_NO_ORDER_LINEE_NO_ORDER_NUMBERE_ALREADY_EXISTING_ORDERE_UNKNOWN_ERROR
GET

Obtenir l'état d'avancement des commandes

Récupère les expéditions (statuts, colis, tracking) à partir d'une date. À appeler en fin de journée.

/Order/GetShipments/{merchantCode}/{login}/{key}/{dateFromUtc}
Paramètre
dateFromUtcyyyy-MM-dd ou yyyy-MM-ddTHH:mm:ss
Réponse
Liste de ShipmentReturn · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_UNKNOWN_ERROR
GET

Obtenir la liste des états

Liste de référence des états de commande (40 états, codes 1 à 490).

/Order/GetStates/{merchantCode}/{login}/{key}
Réponse
Liste de StateReturn · HTTP 200
GET

Obtenir ma liste de transporteurs

/Order/GetCarriers/{merchantCode}/{login}/{key}
Réponse
Liste de CarrierReturn · HTTP 200
GET

Obtenir la liste des commandes en erreur

/Order/GetOrderErrors/{merchantCode}/{login}/{key}
Réponse
Liste de OrderErrorReturn · HTTP 200
POST

Créer un nouvel attendu de retour

Annonce un retour client attendu en entrepôt (pour contrôle qualité et remise en stock).

/Order/CreateNewExpectedReturn/{merchantCode}/{login}/{key}
Corps
Objet ExpectedParcelReturn
Réponse
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_ORDERE_UNKNOWN_PRODUCT_CODEE_NO_RETURN_LINE_QUANTITYE_UNKNOWN_BRANDE_UNKNOWN_ERROR
GET

Obtenir la liste des commandes retournées

/Order/GetReturns/{merchantCode}/{login}/{key}/{dateFromUtc}
Paramètre
dateFromUtcyyyy-MM-dd ou yyyy-MM-ddTHH:mm:ss
Réponse
Liste de OrderReturn · HTTP 200

Produits & stock

POST

Déclarer / mettre à jour un article

CreateNewProduct crée l'article (ou le met à jour s'il existe). UpdateProduct le met à jour (ou le crée s'il n'existe pas).

/Product/CreateNewProduct/{merchantCode}/{login}/{key}
/Product/UpdateProduct/{merchantCode}/{login}/{key}
Corps
Objet Product
Réponse
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_PRODUCT_CODEE_UNKNOWN_ERROR
POST

Déclarer / mettre à jour des articles en masse

/Product/CreateNewProducts/{merchantCode}/{login}/{key}
/Product/UpdateProducts/{merchantCode}/{login}/{key}
Corps
Liste de Product
Réponse
Boolean · HTTP 200
En cas d'erreur sur un produit, aucun produit n'est enregistré / modifié (transaction atomique).
POST

Supprimer un article

/Product/DeleteProduct/{merchantCode}/{login}/{key}/{productCode}
Paramètre
productCode — code de l'article à supprimer
Réponse
Boolean · HTTP 200
E_NO_PRODUCT_CODEE_UNKNOWN_PRODUCT_CODEE_UNKNOWN_MERCHANTE_UNKNOWN_ERROR
GET

Obtenir l'état du stock

Niveaux de stock disponibles à la vente. Sans productCode, retourne tous les produits. Recalage quotidien en fin de journée.

/Product/GetStocks/{merchantCode}/{login}/{key}/{productCode}
Paramètre
productCode — optionnel
Réponse
Liste de StockReturn · HTTP 200
GET

Obtenir la liste des produits en erreur

/Product/GetProductErrors/{merchantCode}/{login}/{key}
Réponse
Liste de ProductErrorReturn · HTTP 200

Réceptions

POST

Créer un nouvel attendu de réception

Annonce une réception de marchandise à venir en entrepôt.

/Product/CreateNewExpectedReceipt/{merchantCode}/{login}/{key}
Corps
Objet Receipt
Réponse
Boolean · HTTP 200
E_NO_RECEIPTE_ALREADY_EXISTING_RECEIPTE_NO_RECEIPT_LINEE_NO_SCHEDULED_DATEE_NO_SUPPLIER_NAMEE_UNKNOWN_PRODUCT_CODEE_NO_RECEIPT_LINE_QUANTITY
GET

Obtenir la liste des réceptions

/Product/GetReceipts/{merchantCode}/{login}/{key}/{dateFromUtc}
Paramètre
dateFromUtcyyyy-MM-dd ou yyyy-MM-ddTHH:mm:ss
Réponse
Liste de ReceiptReturn · HTTP 200

Modèles de données

Principaux objets envoyés / reçus. (O) = obligatoire, string[n] = longueur max n.

Order requête

{
  "OrderNumber": "string[9]",        // (O) unique
  "BrandCode": "string[3]",
  "CurrencyCode": "string[3]",
  "CustomerNumber": "string[50]",
  "Language": "string[2]",
  "Incoterm": "string[3]",
  "MerchantCarrierCode": "string[7]",
  "ScheduledTransmissionDate": "datetime?",
  "Address": {
    "LastName": "string[50]", "FirstName": "string[50]",
    "Address1": "string[35]",  // (O)
    "ZipCode": "string[10]",   // (O)
    "City": "string[50]",      // (O)
    "CountryCode": "string[2]", // (O)
    "MobilePhone": "string[30]", // (O)
    "Email": "string[100]",
    "PickupPointNumber": "string[10]"
  },
  "Billing": { "TotalAmount": "decimal?", /* (O) ... */ },
  "OrderLines": [ {        // (O)
    "ProductCode": "string[30]",        // (O)
    "InternalProductCode": "string[30]",// (O)
    "ProductLabel": "string[120]",      // (O)
    "Quantity": 0,                     // (O)
    "UnitPrice": "decimal?", "VATRate": "decimal?"
  } ]
}

Product requête

{
  "Code": "string[30]",    // (O)
  "Label": "string[120]",  // (O)
  "BarCode": "string[60]", "BrandCode": "string[3]",
  "HsCode": "string[10]", "OriginCountryCode": "string[2]",
  "Weight": "decimal?", "Height": "decimal?", "Width": "decimal?", "Length": "decimal?",
  "IsActive": true, "IsLotManaged": false,
  "AlertThreshold": 0, "PictureUrl": "string[300]",
  "ProductsInBundle": [ { "Code": "string[30]", "Quantity": 1 } ]
}

Receipt requête

{
  "ScheduledDate": "datetime",   // (O)
  "SupplierName": "string[100]", // (O)
  "ReceiptNumber": "string[12]", "CarrierName": "string[100]",
  "ReceiptLines": [ { "ProductCode": "string[30]", "Quantity": 0 } ]  // (O)
}

StockReturn réponse

{
  "Data": [ {
    "Code": "string[30]",
    "AvailableQuantity": 0,
    "ReservedQuantity": 0,
    "BatchesStock": [ { "Number": "string[50]", "OnHandQuantity": 0 } ]
  } ]
}
Autres structures de réponse disponibles : ShipmentReturn (commandes, colis, tracking), ReceiptReturn, OrderReturn, CarrierReturn, StateReturn, OrderErrorReturn, ProductErrorReturn.

Codes d'erreur

Renvoyés dans l'objet Error.Code. Principaux codes par domaine :

DomaineCodes
AuthentificationE_UNKNOWN_USER_OR_KEY · E_UNKNOWN_MERCHANT
CommandeE_NO_ORDER · E_NO_ORDER_LINE · E_NO_ORDER_NUMBER · E_ALREADY_EXISTING_ORDER · E_ORDER_NUMBER_TOO_LONG · E_NO_COUNTRY_CODE · E_UNKNOWN_CARRIER · E_UNKNOWN_BRAND · E_NO_ADDRESS · E_NO_ZIPCODE · E_NO_EMAIL · E_INVALID_EMAIL · E_INVALID_TOTAL_AMOUNT
ProduitE_NO_PRODUCT_CODE · E_UNKNOWN_PRODUCT_CODE · E_PRODUCT_CODE_TOO_LONG · E_NO_PRODUCT_LABEL · E_UNKNOWN_HS_CODE · E_ALREADY_EXISTING_BAR_CODE · E_CIRCULAR_SUBSTITUTION
RéceptionE_NO_RECEIPT · E_ALREADY_EXISTING_RECEIPT · E_NO_RECEIPT_LINE · E_NO_SCHEDULED_DATE · E_NO_SUPPLIER_NAME
GénéralE_UNKNOWN_ERROR
Besoin d'un accompagnement à l'intégration ? Parlez à un expert Futurlog ou consultez la vue d'ensemble des web services.