Hubble APIs for VU Logistics (1.2.0)
Hubble is the customer portal of VU Logistics. It is a web platform that offers:
- a web access for VU Logistics customer
- a set of open APIs for automatic communication with VU Logistics services
In order to fully automate data feed to VU Logistics, the following flows need to be implemented:
Note: This implementation is not fully mandatory: it is possible to implement a hybrid mode where part of the data is uploaded from Excel through the web platform.
Master data
2 categories of master data is required to communicate with VU Logistics:
- SKUs: this is the smallest unit for managing stock. For furniture with several parcels (= components), each parcel is a SKU. See POST SKU
- Suppliers: entity that deliver goods to VU Logistics warehouses, used to facilitate receiving of your goods. See POST Supplier
Note: it is possible to nest SKU object in any Reception. In that case, the platform will feed SKU Master from reception data and will automatically deduplicate data based on SKU code
Logistics data
- In order to inform VU Logistics of an incoming delivery, use POST Reception
- In order to send your customer orders to VU Logistics warehouse , use POST Order
In order to automatize processes in your systems, or get data if necessary, you can retrieve data from Hubble open APIs
Logistics statuses
Receiving confirmation: you can get receiving confirmation by using GET Receptions and using the below query parameters:
- status.code=80
- updatedAt[after]=timestamp of last query
Order status and transportation information: you can get shipment confirmation by using GET Orders and using the below query parameters:
- fulfillmentStatus.code=80
- updatedAt[after]=timestamp of last query
Stocks
Stocks: you can retrieve stocks by using GET Stocks
Stocks movements: you can retrieve stocks movements (all stock changes not due to reception or shipment: for example change to damage, stock loss, ...) by using GET Stocks movements
Authentication
Hubble APIs can be accessed by Bearer token. The token is valid for one year.
Date and times
All times are recorded in UTC timezone.
Base URLs
Production: api.thehubble.co
Sandbox: api.sandbox.thehubble.co
Create new Supplier
In Hubble suppliers are one type of Connection. To create a new supplier in Hubble, please use the endpoint /connections, specifying the relationship as Manufacturer
Request Body schema:
The new Supplier resource
| company required | integer Id of your company in Hubble. Please contact the team to get the value. |
| code required | string unique Code of the supplier |
| name required | string Name of the supplier |
| relationship required | string Type of the connection. For suppliers, use |
Responses
Request samples
- Payload
{- "company": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}Response samples
- 200
{- "id": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}Retrieves the collection of Supplier resources.
Retrieves the collection of Supplier resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| name | string.* Search for suppliers, by name. |
| code | string Query one supplier for a specific code |
| code[] | Array of strings Query suppliers based on a list of codes |
| relationship | string Enum: "Manufacturer" "Customer" "Marketplace" "Entity" "Forwarder" "Warehouse" Query connection by type. For suppliers, use |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "id": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}Create new SKU
Create a new SKU in Hubble.
Request Body schema:
The new SKU resource
| company required | integer Id of your company in Hubble. Please contact the team to get the value. |
| sku required | string <= 14 characters unique SKU code |
| name required | string SKU name |
| description1 | string SKU long description |
| ean required | string EAN of the selling unit |
| eanBox | string EAN of the master carton. To be provided if quantity per box > 1 |
| quantityPerBox required | number > 0 Number if selling unit in a full master carton |
| length required | number > 0 Length of the product in cm |
| width required | number > 0 Width of the product in cm |
| height required | number > 0 Height of the product in cm |
| grossWeight required | number > 0 Weight of the selling unit, in kg |
| grossWeightBox required | number > 0 Weight of the master carton, in kg |
| buyPrice required | number > 0 Product value, used for transportation claims |
| supplier required | integer Id of the Supplier resource. |
Responses
Request samples
- Payload
{- "company": 1,
- "sku": "SKU001",
- "name": "MY BEST SKU",
- "description1": "Queen Bed Frame Heavy Duty Low Profile Metal Platform No Box Spring Needed, Easy to Assembly, Noise Free, Black",
- "ean": "3131781932260",
- "eanBox": "23131781932260",
- "quantityPerBox": 24,
- "length": 120.5,
- "width": 83,
- "height": 15.5,
- "grossWeight": 12.5,
- "grossWeightBox": 12.5,
- "buyPrice": 30.9,
- "supplier": "id"
}Response samples
- 200
{- "id": 1,
- "sku": "SKU001",
- "name": "MY BEST SKU",
- "description1": "Queen Bed Frame Heavy Duty Low Profile Metal Platform No Box Spring Needed, Easy to Assembly, Noise Free, Black",
- "ean": "3131781932260",
- "eanBox": "23131781932260",
- "quantityPerBox": 24,
- "length": 120.5,
- "width": 83,
- "height": 15.5,
- "grossWeight": 12.5,
- "grossWeightBox": 12.5,
- "buyPrice": 30.9,
- "supplier": {
- "id": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}
}Retrieves the collection of Supplier resources.
Retrieves the collection of Supplier resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| name | string.* Search for SKU, by name. |
| sku | string Query one SKU for a specific code |
| code[] | Array of strings Query SKUs based on a list of codes |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "id": 1,
- "sku": "SKU001",
- "name": "MY BEST SKU",
- "description1": "Queen Bed Frame Heavy Duty Low Profile Metal Platform No Box Spring Needed, Easy to Assembly, Noise Free, Black",
- "ean": "3131781932260",
- "eanBox": "23131781932260",
- "quantityPerBox": 24,
- "length": 120.5,
- "width": 83,
- "height": 15.5,
- "grossWeight": 12.5,
- "grossWeightBox": 12.5,
- "buyPrice": 30.9,
- "supplier": {
- "id": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}Create new Reception
Create a new Reception in Hubble.
Request Body schema:
The new Reception resource
| company required | integer Id of your company in Hubble. Please contact the team to get the value. |
| orderNumber required | string <= 13 characters unique Delivery number used as a reference for receiving. For containers, please use Container number |
| referenceNumber | string Purchase order number, displayed on the BL |
| warehouseLocation required | integer ID of the warehouse where the goods are shipped to. For Amblainville warehouse, always |
| supplier required | integer ID of Supplier resource |
| orderType | string Enum: "SEMI" "CONT20" "CONT40" "CONT40HC" "CONT45HC" Delivery type can be one of the following :
|
object (POAttributes) Non-mandatory attributes for Receptions | |
| dueAt required | string <date-time> ETA in warehouse (UTC) |
required | Array of objects (PurchaseOrderLineItem) |
Responses
Request samples
- Payload
{- "company": 1,
- "orderNumber": "CMDU1234569",
- "referenceNumber": "PO123456-1",
- "warehouseLocation": 13,
- "supplier": 1,
- "orderType": "STANDARD",
- "attributes": {
- "deliveryType": "PALLETS"
}, - "dueAt": "2024-01-01T14:00:00+00:00:00",
- "purchaseOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80
}
]
}Response samples
- 200
{- "company": 1,
- "orderNumber": "CMDU1234569",
- "referenceNumber": "PO123456-1",
- "warehouseLocation": 13,
- "orderType": "STANDARD",
- "attributes": {
- "deliveryType": "PALLETS"
}, - "dueAt": "2024-01-01T14:00:00+00:00:00",
- "receivedAt": "2024-01-01T15:22:18+00:00:00",
- "status": {
- "code": 80
}, - "purchaseOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80,
- "quantityReceived": 79
}
]
}Retrieves the collection of Receptions resources.
Retrieves the collection of Receptions resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| orderNumber | string.* Search for a specific order number. |
| referenceNumber | string Search for a specific reference number |
| status.code | string Enum: 10 20 80 95 99 Query by receiving status:
|
| status.code[] | Array of strings Query by several receiving statuses |
| createdAt[before] | string <date-time> Query receptions created before a given timestamp |
| createdAt[after] | string <date-time> Query receptions created after a given timestamp |
| updatedAt[before] | string <date-time> Query receptions updated after a given timestamp |
| updatedAt[after] | string <date-time> Query receptions updated before a given timestamp |
| receivedAt[before] | string <date-time> Query receptions received before a given timestamp |
| receivedAt[after] | string <date-time> Query receptions received after a given timestamp |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "company": 1,
- "orderNumber": "CMDU1234569",
- "referenceNumber": "PO123456-1",
- "warehouseLocation": 13,
- "orderType": "STANDARD",
- "attributes": {
- "deliveryType": "PALLETS"
}, - "dueAt": "2024-01-01T14:00:00+00:00:00",
- "receivedAt": "2024-01-01T15:22:18+00:00:00",
- "status": {
- "code": 80
}, - "purchaseOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80,
- "quantityReceived": 79
}
]
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}Create new Order
Create a new Order in Hubble.
Request Body schema:
The new Order resource
| company required | integer Id of your company in Hubble. Please contact the team to get the value. |
| orderNumber required | string <= 17 characters unique Order number |
| externalOrderNumber required | string Customer's order number |
| deliveryMode | string Enum: "ECO" "STANDARD" "UNPACKING" "MOUNTING" Delivery mode can be one of the following :
|
| warehouseLocation required | integer ID of the warehouse where the goods are shipped from. For Amblainville warehouse, always |
required | object (ShipTo) Receiver's information |
required | Array of objects (SalesOrderLineItem) Order lines |
Array of objects (ServiceLineItem) Service lines can be used to request take back of old products at the same time than delivery, for destruction |
Responses
Request samples
- Payload
{- "company": 1,
- "orderNumber": "ORDER-0001",
- "externalOrderNumber": "CO-0123",
- "deliveryMode": "STANDARD",
- "warehouseLocation": 13,
- "shipTo": {
- "name": "John Doe",
- "title": "MISTER",
- "firstName": "John",
- "lastName": "Doe",
- "streetAddress": "123 Main Street",
- "streetAddress2": "",
- "city": "Anytown",
- "countryCode": "FR",
- "zipcode": 123456,
- "email": "john.doe@example.com",
- "phone": "+33 6 12 34 56 78",
- "languageCode": "FR",
- "attributes": {
- "accessCode": 1234,
- "company": "MY COMPANY LTD.",
- "floor": "3F",
- "building": "A"
}
}, - "salesOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80,
- "purchaseOrderLineItem": {
- "orderNumber": "CMDU1234569",
- "position": 1
}
}
], - "serviceLineItems": [
- {
- "position": 1,
- "serviceType": "REPDES",
- "quantity": 1
}
]
}Response samples
- 200
{- "company": 1,
- "orderNumber": "ORDER-0001",
- "externalOrderNumber": "CO-0123",
- "deliveryMode": "STANDARD",
- "warehouseLocation": 13,
- "shipTo": {
- "name": "John Doe",
- "title": "MISTER",
- "firstName": "John",
- "lastName": "Doe",
- "streetAddress": "123 Main Street",
- "streetAddress2": "",
- "city": "Anytown",
- "countryCode": "FR",
- "zipcode": 123456,
- "email": "john.doe@example.com",
- "phone": "+33 6 12 34 56 78",
- "languageCode": "FR",
- "attributes": {
- "accessCode": 1234,
- "company": "MY COMPANY LTD.",
- "floor": "3F",
- "building": "A"
}
}, - "salesOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80,
- "quantityShipped": 79
}
], - "serviceLineItems": [
- {
- "position": 1,
- "serviceType": "REPDES",
- "quantity": 1
}
], - "shippedAt": "2024-01-01T15:22:18+00:00:00",
- "fulfillmentStatus": {
- "code": 80
}, - "transportationStatus": {
- "code": 80
}, - "attributes": {
- "amazonTrackingNumber": "123456XX1234",
- "receiptNumber": "1234567"
}
}Retrieves the collection of Orders resources.
Retrieves the collection of Orders resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| orderNumber | string.* Search for a specific order number. |
| externalOrderNumber | string Search for a specific external order number |
| status.code | string Enum: 10 20 80 95 99 Query by fulfillment status:
|
| status.code[] | Array of strings Query by several fulfillment statuses |
| createdAt[before] | string <date-time> Query orders created before a given timestamp |
| createdAt[after] | string <date-time> Query orders created after a given timestamp |
| updatedAt[before] | string <date-time> Query orders updated after a given timestamp |
| updatedAt[after] | string <date-time> Query orders updated before a given timestamp |
| receivedAt[before] | string <date-time> Query orders shipped before a given timestamp |
| receivedAt[after] | string <date-time> Query orders shipped after a given timestamp |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "company": 1,
- "orderNumber": "ORDER-0001",
- "externalOrderNumber": "CO-0123",
- "deliveryMode": "STANDARD",
- "warehouseLocation": 13,
- "shipTo": {
- "name": "John Doe",
- "title": "MISTER",
- "firstName": "John",
- "lastName": "Doe",
- "streetAddress": "123 Main Street",
- "streetAddress2": "",
- "city": "Anytown",
- "countryCode": "FR",
- "zipcode": 123456,
- "email": "john.doe@example.com",
- "phone": "+33 6 12 34 56 78",
- "languageCode": "FR",
- "attributes": {
- "accessCode": 1234,
- "company": "MY COMPANY LTD.",
- "floor": "3F",
- "building": "A"
}
}, - "salesOrderLineItems": [
- {
- "position": 1,
- "variant": 1,
- "quantity": 80,
- "quantityShipped": 79
}
], - "serviceLineItems": [
- {
- "position": 1,
- "serviceType": "REPDES",
- "quantity": 1
}
], - "shippedAt": "2024-01-01T15:22:18+00:00:00",
- "fulfillmentStatus": {
- "code": 80
}, - "transportationStatus": {
- "code": 80
}, - "attributes": {
- "amazonTrackingNumber": "123456XX1234",
- "receiptNumber": "1234567"
}
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}Retrieves the collection of Stocks resources.
Retrieves the collection of Stocks resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| variant.id | string Query by SKU id |
| variant.id[] | Array of strings Query by several SKU ids |
| variant.sku | string Query for a given SKU code |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "available": 123,
- "incoming": 123,
- "allocated": 123,
- "locked": 123,
- "variant": {
- "id": 1,
- "sku": "SKU001",
- "name": "MY BEST SKU",
- "description1": "Queen Bed Frame Heavy Duty Low Profile Metal Platform No Box Spring Needed, Easy to Assembly, Noise Free, Black",
- "ean": "3131781932260",
- "eanBox": "23131781932260",
- "quantityPerBox": 24,
- "length": 120.5,
- "width": 83,
- "height": 15.5,
- "grossWeight": 12.5,
- "grossWeightBox": 12.5,
- "buyPrice": 30.9,
- "supplier": {
- "id": 1,
- "code": "SUPPLIER01",
- "name": "MY BEST SUPPLIER",
- "relationship": "Manufacturer"
}
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}Retrieves the collection of Stock Movements resources.
Retrieves the collection of Stock Movements resources.
query Parameters
| page | integer Default: 1 The collection page number |
| itemsPerPage | integer [ 0 .. 10000 ] Default: 30 The number of items per page |
| pagination | boolean Enable or disable pagination |
| variant.id | string Query by SKU id |
| variant.id[] | Array of strings Query by several SKU ids |
| variant.sku | string Query for a given SKU code |
| createdAt[before] | string <date-time> Query movements created before a given timestamp |
| createdAt[after] | string <date-time> Query movements created after a given timestamp |
Responses
Response samples
- 200
{- "hydra:member": [
- {
- "fromPosition": "available",
- "toPosition": null,
- "quantity": 23,
- "movedAt": "2024-01-01T14:00:00+00:00:00",
- "comment": "Send samples to brand's HQ",
- "variant": {
- "company": 1,
- "sku": "SKU001",
- "name": "MY BEST SKU",
- "description1": "Queen Bed Frame Heavy Duty Low Profile Metal Platform No Box Spring Needed, Easy to Assembly, Noise Free, Black",
- "ean": "3131781932260",
- "eanBox": "23131781932260",
- "quantityPerBox": 24,
- "length": 120.5,
- "width": 83,
- "height": 15.5,
- "grossWeight": 12.5,
- "grossWeightBox": 12.5,
- "buyPrice": 30.9,
- "supplier": "id"
}, - "processed": true
}
], - "hydra:totalItems": 0,
- "hydra:view": {
- "@id": "/",
- "@type": "string"
}, - "hydra:search": {
- "@type": "string",
- "hydra:template": "string",
- "hydra:variableRepresentation": "string",
- "hydra:mapping": [
- {
- "@type": "string",
- "variable": "string",
- "property": "string",
- "required": true
}
]
}
}