DHL Express
DHL Express : leader mondial shipping express avec réseau 220+ pays. Solution premium time-critical shipments et international B2B.
📚 Ressources Complémentaires
📖 Guides Pratiques
⚖️ Comparatifs
DHL Express : Premium Express Shipping Global
Qu’est-ce que DHL Express ?
DHL Express est le leader mondial express shipping avec 220+ pays coverage et 40+ années d’expertise international. Cette division Deutsche Post focus sur time-critical shipments, documents urgents et high-value goods avec network propriétaire avions, hubs stratégiques et service premium B2B.
🚀 Fonctionnalités Principales
Network Express Global
- 220+ countries : coverage mondiale complète
- 120,000 destinations : cities, remote areas included
- Own fleet : 260+ avions, 32,000+ véhicules
- Strategic hubs : Leipzig, Cincinnati, Hong Kong
Service Levels Premium
- Express 9:00 : delivery by 9 AM next day
- Express 10:30 : delivery by 10:30 AM
- Express 12:00 : delivery by noon
- Express Worldwide : 1-3 days international
B2B Solutions Specialized
- GoGreen Plus : carbon-neutral shipping
- Dangerous goods : IATA certified handling
- Temperature controlled : pharmaceutical, food
- Large items : up to 300kg per piece
Digital Platform Integration
- MyDHL+ : platform comprehensive B2B
- API integration : enterprise systems
- Tracking advanced : real-time visibility
- Customs expertise : clearance optimized
💰 Prix et Structure
Enterprise Pricing Model
- No public rates : enterprise negotiation required
- Volume discounts : based on annual commitment
- Account setup : minimum volume thresholds
- Fuel surcharges : weekly adjustment automatic
Typical Rate Structure
- Documents international : €25-45 per shipment
- Packages <1kg : €35-65 international
- Packages 1-5kg : €45-95 depending destination
- Express 9:00 : premium 40-60% vs standard
Additional Services
- Insurance coverage : up to €2,500 included
- Signature required : standard all shipments
- Address correction : automatic service
- Customs handling : expertise included
Account Requirements
- Business verification : company registration required
- Credit application : approval process
- Minimum volume : typically €500+/month
- Monthly billing : credit terms available
⭐ Points Forts
🌍 Network Leadership
Global coverage inégalé :
- Own aircraft fleet control complete
- Strategic hub locations optimized
- Remote destinations accessibility
- Emergency logistics capabilities
⚡ Speed Performance
Transit times industry-leading :
- Express 9:00 commitment strict
- Cross-border efficiency optimized
- Customs clearance expedited
- Weekend/holiday delivery available
🏢 B2B Expertise
Business solutions specialized :
- Account management dedicated
- Complex logistics handling
- Regulatory compliance expertise
- Supply chain integration
🛡️ Reliability & Security
Service quality premium :
- 99.5%+ on-time delivery
- Package security protocols strict
- Insurance coverage comprehensive
- Damage/loss rates minimal
⚠️ Points Faibles
💰 Prix Premium
Cost structure élevé :
- Premium pricing vs alternatives
- SME rates non-competitive
- Fuel surcharges significant
- Additional services costly
🔧 Complexity Integration
Enterprise focus barriers :
- API documentation complex
- Integration effort substantial
- Technical expertise required
- Setup process lengthy
📊 Volume Requirements
Access barriers SME :
- Minimum volume thresholds
- Credit approval required
- Business verification strict
- Monthly commitment expectations
🏪 Consumer Limitations
B2C services limited :
- Residential delivery restrictions
- Consumer rates unavailable
- Pickup scheduling complex
- Customer service B2B focused
🎯 Pour Qui ?
✅ Parfait Pour
- Enterprises time-critical shipping
- B2B international trade intensive
- High-value goods security priority
- Industries specialized (pharma, automotive)
- Global supply chains reliability crucial
❌ Moins Adapté Pour
- SME volume/budget constraints
- B2C e-commerce cost-sensitive
- Domestic shipping needs only
- Price-sensitive shipping requirements
- Casual senders occasional use
📊 DHL Express vs Express Carriers
| Critère | DHL Express | FedEx | UPS |
|---|---|---|---|
| International Network | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Express Speed | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| B2B Focus | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| SME Accessibility | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| API Integration | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
🛠️ Configuration & Intégration
DHL Express API Integration
// DHL Express API integration
const axios = require('axios');
class DHLExpressService {
constructor(apiKey, apiSecret, accountNumber, environment = 'production') {
this.apiKey = apiKey;
this.apiSecret = apiSecret;
this.accountNumber = accountNumber;
this.baseURL = environment === 'production'
? 'https://express.api.dhl.com'
: 'https://express.api.dhl.com/mydhlapi/test';
this.authToken = null;
}
async authenticate() {
try {
const credentials = Buffer.from(`${this.apiKey}:${this.apiSecret}`).toString('base64');
const response = await axios.post(`${this.baseURL}/v1/oauth/token`, {
grant_type: 'client_credentials'
}, {
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/x-www-form-urlencoded'
}
});
this.authToken = response.data.access_token;
// Auto-refresh token before expiration
setTimeout(() => this.authenticate(), (response.data.expires_in - 300) * 1000);
return this.authToken;
} catch (error) {
console.error('DHL authentication failed:', error.response?.data || error.message);
throw new Error('Authentication failed');
}
}
async getRates(shipmentData) {
if (!this.authToken) await this.authenticate();
try {
const payload = {
customerDetails: {
shipperDetails: {
postalAddress: {
cityName: shipmentData.origin.city,
countryCode: shipmentData.origin.country,
postalCode: shipmentData.origin.postalCode
}
},
receiverDetails: {
postalAddress: {
cityName: shipmentData.destination.city,
countryCode: shipmentData.destination.country,
postalCode: shipmentData.destination.postalCode
}
}
},
accounts: [{
typeCode: 'shipper',
number: this.accountNumber
}],
productCode: 'P', // All products
packages: shipmentData.packages.map(pkg => ({
weight: pkg.weight,
dimensions: {
length: pkg.dimensions.length,
width: pkg.dimensions.width,
height: pkg.dimensions.height
}
})),
plannedShippingDateAndTime: new Date().toISOString(),
unitOfMeasurement: 'metric',
isCustomsDeclarable: shipmentData.isInternational || false,
monetaryAmount: shipmentData.declaredValue || 100,
currency: shipmentData.currency || 'EUR'
};
const response = await axios.post(
`${this.baseURL}/v1/rates`,
payload,
{
headers: {
'Authorization': `Bearer ${this.authToken}`,
'Content-Type': 'application/json'
}
}
);
return this.processRates(response.data.products);
} catch (error) {
console.error('DHL rate request failed:', error.response?.data || error.message);
throw new Error('Unable to calculate rates');
}
}
async createShipment(rateSelection, shipmentDetails) {
if (!this.authToken) await this.authenticate();
try {
const payload = {
plannedShippingDateAndTime: new Date().toISOString(),
pickup: {
isRequested: true,
closeTime: "18:00",
location: "reception",
specialInstructions: shipmentDetails.pickupInstructions || []
},
productCode: rateSelection.productCode,
localProductCode: rateSelection.localProductCode,
accounts: [{
typeCode: 'shipper',
number: this.accountNumber
}],
customerDetails: {
shipperDetails: {
postalAddress: {
streetLines: [shipmentDetails.shipper.street1, shipmentDetails.shipper.street2].filter(Boolean),
cityName: shipmentDetails.shipper.city,
stateOrProvinceCode: shipmentDetails.shipper.state,
postalCode: shipmentDetails.shipper.postalCode,
countryCode: shipmentDetails.shipper.country
},
contactInformation: {
companyName: shipmentDetails.shipper.company,
fullName: shipmentDetails.shipper.name,
phone: shipmentDetails.shipper.phone,
email: shipmentDetails.shipper.email
}
},
receiverDetails: {
postalAddress: {
streetLines: [shipmentDetails.receiver.street1, shipmentDetails.receiver.street2].filter(Boolean),
cityName: shipmentDetails.receiver.city,
stateOrProvinceCode: shipmentDetails.receiver.state,
postalCode: shipmentDetails.receiver.postalCode,
countryCode: shipmentDetails.receiver.country
},
contactInformation: {
companyName: shipmentDetails.receiver.company,
fullName: shipmentDetails.receiver.name,
phone: shipmentDetails.receiver.phone,
email: shipmentDetails.receiver.email
}
}
},
content: {
packages: shipmentDetails.packages.map((pkg, index) => ({
typeCode: pkg.type || "3BX",
weight: pkg.weight,
dimensions: {
length: pkg.dimensions.length,
width: pkg.dimensions.width,
height: pkg.dimensions.height
},
customerReferences: [{
value: shipmentDetails.reference || `PKG${index + 1}`,
typeCode: "CU"
}]
})),
isCustomsDeclarable: shipmentDetails.isInternational,
declaredValue: shipmentDetails.declaredValue,
declaredValueCurrency: shipmentDetails.currency,
exportDeclaration: shipmentDetails.isInternational ? {
lineItems: shipmentDetails.items.map(item => ({
number: item.lineNumber || 1,
description: item.description,
price: item.unitPrice,
quantity: {
value: item.quantity,
unitOfMeasurement: "pcs"
},
commodityCodes: [{
typeCode: "outbound",
value: item.hsCode
}],
weight: {
netValue: item.weight,
grossValue: item.weight
},
categoryCode: "91",
brand: item.brand || "",
countryOfOrigin: item.countryOfOrigin || shipmentDetails.shipper.country
}))
} : undefined
},
documentImages: [{
typeCode: "INV", // Invoice
imageFormat: "PDF",
content: shipmentDetails.invoiceBase64 // Base64 encoded invoice
}],
onDemandDelivery: {
deliveryOption: "servicepoint",
location: shipmentDetails.deliveryOption?.location || "recipient"
},
requestOndemandDeliveryURL: true,
shipmentNotification: [{
typeCode: "email",
receiverId: "1",
languageCode: shipmentDetails.language || "en",
languageCountryCode: shipmentDetails.shipper.country,
bespokeMessage: shipmentDetails.notificationMessage || ""
}],
prepaidCharges: rateSelection.totalPrice
};
const response = await axios.post(
`${this.baseURL}/v1/shipments`,
payload,
{
headers: {
'Authorization': `Bearer ${this.authToken}`,
'Content-Type': 'application/json'
}
}
);
return {
shipmentTrackingNumber: response.data.shipmentTrackingNumber,
trackingUrl: response.data.trackingUrl,
dispatchConfirmationNumber: response.data.dispatchConfirmationNumber,
packages: response.data.packages.map(pkg => ({
trackingNumber: pkg.trackingNumber,
labelUrl: pkg.documents[0]?.imageFormat === 'PDF' ? pkg.documents[0].content : null
})),
pickupDate: response.data.pickupDetails?.readyByTime,
estimatedDelivery: response.data.estimatedDeliveryDate
};
} catch (error) {
console.error('DHL shipment creation failed:', error.response?.data || error.message);
throw new Error('Shipment creation failed');
}
}
async trackShipment(trackingNumber) {
if (!this.authToken) await this.authenticate();
try {
const response = await axios.get(
`${this.baseURL}/v1/shipments/${trackingNumber}/tracking`,
{
headers: {
'Authorization': `Bearer ${this.authToken}`,
'Accept': 'application/json'
}
}
);
const shipment = response.data.shipments[0];
return {
trackingNumber: shipment.shipmentTrackingNumber,
status: shipment.status,
service: shipment.service,
origin: shipment.origin,
destination: shipment.destination,
estimatedDelivery: shipment.estimatedTimeOfDelivery,
events: shipment.events.map(event => ({
timestamp: new Date(event.date + 'T' + event.time),
location: event.location?.address,
status: event.description,
serviceArea: event.serviceArea?.description
}))
};
} catch (error) {
console.error('DHL tracking failed:', error.response?.data || error.message);
throw new Error('Unable to track shipment');
}
}
async schedulePickup(pickupDetails) {
if (!this.authToken) await this.authenticate();
try {
const payload = {
plannedPickupDateAndTime: pickupDetails.plannedDate,
closeTime: pickupDetails.closeTime || "18:00",
location: pickupDetails.location || "reception",
locationType: pickupDetails.locationType || "business",
accounts: [{
typeCode: 'shipper',
number: this.accountNumber
}],
customerDetails: {
shipperDetails: {
postalAddress: {
streetLines: [pickupDetails.address.street1, pickupDetails.address.street2].filter(Boolean),
cityName: pickupDetails.address.city,
stateOrProvinceCode: pickupDetails.address.state,
postalCode: pickupDetails.address.postalCode,
countryCode: pickupDetails.address.country
},
contactInformation: {
companyName: pickupDetails.contact.company,
fullName: pickupDetails.contact.name,
phone: pickupDetails.contact.phone,
email: pickupDetails.contact.email
}
}
},
shipmentDetails: pickupDetails.shipments.map(shipment => ({
productCode: shipment.productCode,
packages: shipment.packages,
plannedShippingDate: shipment.plannedDate,
unitOfMeasurement: "metric"
})),
specialInstructions: pickupDetails.specialInstructions || []
};
const response = await axios.post(
`${this.baseURL}/v1/pickups`,
payload,
{
headers: {
'Authorization': `Bearer ${this.authToken}`,
'Content-Type': 'application/json'
}
}
);
return {
dispatchConfirmationNumber: response.data.dispatchConfirmationNumber,
readyByTime: response.data.readyByTime,
nextPickupDate: response.data.nextPickupDate,
warnings: response.data.warnings || []
};
} catch (error) {
console.error('DHL pickup scheduling failed:', error.response?.data || error.message);
throw new Error('Pickup scheduling failed');
}
}
processRates(products) {
return products
.filter(product => product.totalPrice && product.totalPrice.length > 0)
.map(product => ({
productCode: product.productCode,
localProductCode: product.localProductCode,
productName: product.productName,
serviceName: product.localProductName,
totalPrice: parseFloat(product.totalPrice[0].price),
currency: product.totalPrice[0].currency,
deliveryCapabilities: {
deliveryTypeCode: product.deliveryCapabilities?.deliveryTypeCode,
estimatedDeliveryDateAndTime: product.deliveryCapabilities?.estimatedDeliveryDateAndTime,
destinationServiceAreaCode: product.deliveryCapabilities?.destinationServiceAreaCode,
deliveryAdditionalDays: product.deliveryCapabilities?.deliveryAdditionalDays,
deliveryDayOfWeek: product.deliveryCapabilities?.deliveryDayOfWeek
},
items: product.items?.map(item => ({
name: item.name,
price: parseFloat(item.price),
currency: item.priceCurrency
})) || []
}))
.sort((a, b) => a.totalPrice - b.totalPrice);
}
}
// Usage example
const dhlExpress = new DHLExpressService(
process.env.DHL_API_KEY,
process.env.DHL_API_SECRET,
process.env.DHL_ACCOUNT_NUMBER,
'production'
);
async function createExpressShipment(orderData) {
try {
// Calculate rates first
const rates = await dhlExpress.getRates({
origin: {
city: 'Paris',
country: 'FR',
postalCode: '75001'
},
destination: {
city: 'New York',
country: 'US',
postalCode: '10001'
},
packages: [{
weight: 2.5,
dimensions: { length: 30, width: 20, height: 15 }
}],
isInternational: true,
declaredValue: 299.99,
currency: 'EUR'
});
// Select Express 10:30 service if available
const selectedRate = rates.find(rate =>
rate.productName.includes('10:30')) || rates[0];
// Create shipment
const shipment = await dhlExpress.createShipment(selectedRate, {
shipper: {
name: 'OSCLOAD Store',
company: 'OSCLOAD SAS',
street1: '123 Business Street',
city: 'Paris',
postalCode: '75001',
country: 'FR',
phone: '+33123456789',
email: 'shipping@oscload.com'
},
receiver: orderData.receiver,
packages: orderData.packages,
items: orderData.items,
isInternational: true,
declaredValue: orderData.value,
currency: 'EUR',
reference: orderData.orderNumber
});
console.log('DHL Express shipment created:', shipment.shipmentTrackingNumber);
return shipment;
} catch (error) {
console.error('Express shipment failed:', error);
throw error;
}
}
🏆 Notre Verdict
DHL Express leader incontesté express international avec network propriétaire et service premium B2B. Excellent time-critical shipments mais prix premium et complexity integration.
Note Globale : 4.3/5 ⭐⭐⭐⭐⭐
- Global Network : 5/5
- Express Speed : 5/5
- Service Reliability : 5/5
- SME Accessibility : 2/5
- API Integration : 4/5
🎯 Cas d’Usage Réels
💡 Exemple : Pharmaceutical Company
Time-critical medical supplies :
- Temperature controlled : cold chain integrity
- Express 9:00 : hospital delivery critical
- Dangerous goods : IATA compliance automatic
- Track & trace : real-time visibility complete
💡 Exemple : Automotive Parts Supplier
Supply chain urgency :
- Same-day delivery : production line continuity
- B2B expertise : industrial packaging
- Global network : manufacturing sites worldwide
- Emergency logistics : downtime prevention
💡 Conseil OSCLOAD : DHL Express premium choice time-critical international B2B. Volumes importants négociation rates. Alternative UPS/FedEx competitive pricing ou regional carriers domestic focus.