Referencia API · FuturWeb

Referencia de la API Futurlog

API REST / JSON para conectar sus sistemas a la logística Futurlog: pedidos, productos, stock, recepciones y devoluciones. Sus programas llaman a nuestros web services para gestionar sus flujos de forma continua.

Introducción

Los Web Services Futurlog (FuturWeb) permiten intercambiar información entre sus sistemas y los de Futurlog. El principio: son sus programas los que llaman a nuestros servicios para transmitir (bajada) sus catálogos y pedidos, y para recuperar (subida) el stock, los estados y el seguimiento. La API es REST e intercambia JSON.

Autenticación

Cada llamada se autentica directamente en la URL, mediante su código de comerciante, su login y su clave. La estructura general de una solicitud es:

https://jws.futurlog.com/{Application}/{Action}/{MerchantCode}/{Login}/{Key}/{Parameter}
ParámetroDescripción
MerchantCodeSu código de comerciante, 3 caracteres alfanuméricos.
LoginSu identificador. En entorno de prueba, lleva el sufijo -test.
KeySu clave secreta de 64 caracteres [a-Z0-9]. Distinta entre prueba y producción.
Prueba vs producción. El entorno de prueba utiliza un login con el sufijo -test y una clave diferente. Valide sus integraciones en prueba antes de pasar a las credenciales de producción.

Formato y gestión de errores

Todas las solicitudes envían la cabecera Accept: application/json. Una respuesta correcta devuelve un código HTTP 200 (un booleano para las creaciones, una lista para las lecturas). En caso de error, el cuerpo contiene un objeto Error:

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

Pedidos

POST

Crear un nuevo pedido

Transmite un pedido para preparar y enviar. El número de pedido es obligatorio y único.

/Order/CreateNewOrder/{merchantCode}/{login}/{key}
Cuerpo
Objeto Order (ver modelos)
Respuesta
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_ORDERE_NO_ORDER_LINEE_NO_ORDER_NUMBERE_ALREADY_EXISTING_ORDERE_UNKNOWN_ERROR
GET

Obtener el estado de avance de los pedidos

Recupera los envíos (estados, paquetes, seguimiento) a partir de una fecha. Se recomienda llamar al final del día.

/Order/GetShipments/{merchantCode}/{login}/{key}/{dateFromUtc}
Parámetro
dateFromUtcyyyy-MM-dd o yyyy-MM-ddTHH:mm:ss
Respuesta
Lista de ShipmentReturn · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_UNKNOWN_ERROR
GET

Obtener la lista de estados

Lista de referencia de los estados de pedido (40 estados, códigos del 1 al 490).

/Order/GetStates/{merchantCode}/{login}/{key}
Respuesta
Lista de StateReturn · HTTP 200
GET

Obtener mi lista de transportistas

/Order/GetCarriers/{merchantCode}/{login}/{key}
Respuesta
Lista de CarrierReturn · HTTP 200
GET

Obtener la lista de pedidos con error

/Order/GetOrderErrors/{merchantCode}/{login}/{key}
Respuesta
Lista de OrderErrorReturn · HTTP 200
POST

Crear una nueva devolución prevista

Anuncia una devolución de cliente prevista en el almacén (para control de calidad y reposición de stock).

/Order/CreateNewExpectedReturn/{merchantCode}/{login}/{key}
Cuerpo
Objeto ExpectedParcelReturn
Respuesta
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_ORDERE_UNKNOWN_PRODUCT_CODEE_NO_RETURN_LINE_QUANTITYE_UNKNOWN_BRANDE_UNKNOWN_ERROR
GET

Obtener la lista de pedidos devueltos

/Order/GetReturns/{merchantCode}/{login}/{key}/{dateFromUtc}
Parámetro
dateFromUtcyyyy-MM-dd o yyyy-MM-ddTHH:mm:ss
Respuesta
Lista de OrderReturn · HTTP 200

Productos y stock

POST

Declarar / actualizar un artículo

CreateNewProduct crea el artículo (o lo actualiza si ya existe). UpdateProduct lo actualiza (o lo crea si no existe).

/Product/CreateNewProduct/{merchantCode}/{login}/{key}
/Product/UpdateProduct/{merchantCode}/{login}/{key}
Cuerpo
Objeto Product
Respuesta
Boolean · HTTP 200
E_UNKNOWN_USER_OR_KEYE_UNKNOWN_MERCHANTE_NO_PRODUCT_CODEE_UNKNOWN_ERROR
POST

Declarar / actualizar artículos en masa

/Product/CreateNewProducts/{merchantCode}/{login}/{key}
/Product/UpdateProducts/{merchantCode}/{login}/{key}
Cuerpo
Lista de Product
Respuesta
Boolean · HTTP 200
En caso de error en un producto, ningún producto se registra ni se modifica (transacción atómica).
POST

Eliminar un artículo

/Product/DeleteProduct/{merchantCode}/{login}/{key}/{productCode}
Parámetro
productCode — código del artículo a eliminar
Respuesta
Boolean · HTTP 200
E_NO_PRODUCT_CODEE_UNKNOWN_PRODUCT_CODEE_UNKNOWN_MERCHANTE_UNKNOWN_ERROR
GET

Obtener el estado del stock

Niveles de stock disponibles para la venta. Sin productCode, devuelve todos los productos. Recálculo diario al final del día.

/Product/GetStocks/{merchantCode}/{login}/{key}/{productCode}
Parámetro
productCode — opcional
Respuesta
Lista de StockReturn · HTTP 200
GET

Obtener la lista de productos con error

/Product/GetProductErrors/{merchantCode}/{login}/{key}
Respuesta
Lista de ProductErrorReturn · HTTP 200

Recepciones

POST

Crear una nueva recepción prevista

Anuncia una recepción de mercancía prevista en el almacén.

/Product/CreateNewExpectedReceipt/{merchantCode}/{login}/{key}
Cuerpo
Objeto Receipt
Respuesta
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

Obtener la lista de recepciones

/Product/GetReceipts/{merchantCode}/{login}/{key}/{dateFromUtc}
Parámetro
dateFromUtcyyyy-MM-dd o yyyy-MM-ddTHH:mm:ss
Respuesta
Lista de ReceiptReturn · HTTP 200

Modelos de datos

Objetos enviados / recibidos, lista exhaustiva de campos. (O) = obligatorio, (O/F) = obligatorio según sus parámetros FuturLog, string[n] = longitud máx. n, ? = nullable. Los campos sin anotación son facultativos.

Order solicitud

{
  "OrderNumber": "string[9]",                // (O) único
  "BrandCode": "string[3]",                  // (O/F) código de la enseña
  "CurrencyCode": "string[3]",               // divisa (EUR, USD, ...)
  "CustomerNumber": "string[50]",            // n.º de pedido cliente (B2B)
  "Language": "string[2]",                   // idioma de la enseña
  "Incoterm": "string[3]",
  "DateUtc": "datetime?",                    // fecha del pedido
  "ScheduledTransmissionDate": "datetime?",  // transmisión programada al logístico
  "MerchantCarrierCode": "string[7]",        // transportista del comerciante: código
  "MerchantCarrierLabel": "string[50]",      // transportista del comerciante: nombre
  "ShippingServiceCode": "string[3]",        // A2P, CIT, BPR, CDI, ACP, DOM, RDV, MRL...
  "StockType": "string[3]",              // tipo de stock (STD, DEF, BLQ), STD por defecto
  "PickerComments": "string[500]",           // comentario del preparador
  "EshopId": "string", "EshopCustom1": "string",     // ref. / info e-shop
  "CustomInvoiceBase64": "string",          // factura personalizada (Base64)
  "CustomDocumentBase64": "string",         // documento personalizado (Base64)
  "Address": {                                    // (O) dirección de entrega
    "CorporateName": "string[100]",
    "LastName": "string[50]", "FirstName": "string[50]",
    "Address1": "string[35]",              // (O)
    "Address2": "string[35]", "Address3": "string[35]",
    "ZipCode": "string[10]",               // (O)
    "City": "string[50]",                  // (O)
    "ProvinceCode": "string[2]",            // EE. UU. / Canadá
    "CountryCode": "string[2]",             // (O)
    "MobilePhone": "string[30]",            // (O)
    "Phone": "string[30]",
    "Email": "string[100]",
    "PickupPointNumber": "string[10]",       // punto de recogida
    "Comments": "string[500]"
  },
  "Billing": {                                    // facturación
    "CorporateName": "string[50]",
    "LastName": "string[50]", "FirstName": "string[50]",
    "Address1": "string[35]",              // (O)
    "Address2": "string[35]", "Address3": "string[35]",
    "ZipCode": "string[10]",               // (O)
    "City": "string[50]",                  // (O)
    "ProvinceCode": "string[2]",            // EE. UU. / Canadá
    "CountryCode": "string[2]",             // (O)
    "BillNumber": "string[50]",            // n.º de factura
    "TotalAmount": "decimal?",            // (O) total del pedido con IVA
    "ShipmentPrice": "decimal?",          // gastos de envío con IVA
    "ShipmentVAT": "decimal?",            // (O/F) IVA de los gastos de envío
    "Discount": "decimal?", "DiscountHT": "decimal?", "DiscountTTC": "decimal?"  // descuento (sin/con IVA según parámetros)
  },
  "Gift": {                                       // regalo
    "Message": "string",                   // mensaje de la tarjeta regalo
    "PackageType": "int?"                  // tipo de papel de regalo
  },
  "OrderLines": [ {                               // (O) líneas de pedido
    "ProductCode": "string[30]",            // (O) ref. de producto
    "InternalProductCode": "string[30]",    // (O) ref. interna
    "ProductLabel": "string[120]",         // (O)
    "ProductBatchNumber": "string[30]",      // n.º de lote
    "Quantity": 0,                         // (O)
    "UnitPrice": "decimal?", "UnitPriceHT": "decimal?", "UnitPriceTTC": "decimal?",  // (O/F) precio unitario (sin/con IVA según parámetros)
    "VATRate": "decimal?"                  // (O/F) tipo de IVA
  } ]
}

Product solicitud

{
  "Code": "string[30]",               // (O) código de producto
  "Label": "string[120]",            // (O) descripción del producto
  "BarCode": "string[60]",           // código de barras
  "BrandCode": "string[3]",          // código de la enseña
  "ExternalCode": "string[60]",      // código de proveedor
  "HsCode": "string[10]",            // nomenclatura aduanera
  "OriginCountryCode": "string[2]",  // país de origen
  "Family": "string[100]",           // categoría de producto
  "Model": "string[100]", "Color": "string[50]", "Size": "string[100]",
  "Type": "string[100]",            // 'p' = físico, 'v' = virtual
  "Weight": "decimal?",             // peso en kg
  "Height": "decimal?", "Width": "decimal?", "Length": "decimal?",   // dimensiones en cm
  "UnitPriceHT": "decimal?",        // último precio sin IVA
  "TvaRate": "decimal?",            // tipo de IVA
  "WeePrice": "decimal?",           // eco-participación
  "AlertThreshold": 0,               // umbral de alerta de stock
  "IsActive": true, "IsLotManaged": false,
  "PictureUrl": "string[300]",       // URL de la imagen
  "EshopId": "string", "EshopCustom1": "string",     // ref. / info e-shop
  "Parameter1": "string", "Parameter2": "string",  // parámetros personalizados
  "ProductsInBundle": [ { "Code": "string[30]", "Quantity": 1 } ]  // componentes (si es un producto compuesto)
}

Receipt solicitud recepción prevista

{
  "ScheduledDate": "datetime",      // (O) fecha de recepción prevista
  "StockType": "string[3]",    // tipo de stock objetivo: STD (defecto), DEF (defectuoso), BLQ (bloqueado)
  "SupplierName": "string[100]",    // (O) proveedor
  "ReceiptNumber": "string[12]",    // n.º de recepción
  "CarrierName": "string[100]",     // transportista
  "DeliveryComments": "string[500]", // comentario de entrega
  "ReceiptLines": [ {                       // (O) líneas de recepción
    "ProductCode": "string[30]",          // (O) ref. de producto
    "Quantity": 0                        // (O) cantidad anunciada
  } ]
}

StockReturn respuesta

{
  "Data": [ {
    "Code": "string[30]",
    "AvailableQuantity": 0,
    "ReservedQuantity": 0,
    "BatchesStock": [ { "Number": "string[50]", "OnHandQuantity": 0 } ]
  } ]
}
Otras estructuras de respuesta disponibles: ShipmentReturn (pedidos, paquetes, seguimiento), ReceiptReturn, OrderReturn, CarrierReturn, StateReturn, OrderErrorReturn, ProductErrorReturn.

Códigos de error

Devueltos en el objeto Error.Code. Principales códigos por dominio:

DominioCódigos
AutenticaciónE_UNKNOWN_USER_OR_KEY · E_UNKNOWN_MERCHANT
PedidoE_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
ProductoE_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
RecepciónE_NO_RECEIPT · E_ALREADY_EXISTING_RECEIPT · E_NO_RECEIPT_LINE · E_NO_SCHEDULED_DATE · E_NO_SUPPLIER_NAME
GeneralE_UNKNOWN_ERROR
¿Necesita ayuda con la integración? Hable con un experto Futurlog o consulte la vista general de los web services.