Obtener Tarifas de Envío
Calcula las tarifas de envío para paquetes dentro de Estados Unidos. Este endpoint permite obtener cotizaciones de FedEx y otros transportistas disponibles.
Este endpoint solo funciona para envíos dentro de Estados Unidos. Para envíos en México u otros países, contacta a soporte para obtener tarifas.
Endpoint
POST /v1/client/shipment/rates
Descripción
Este endpoint te permite obtener tarifas de FedEx para envíos dentro de Estados Unidos. Necesitas proporcionar el token Bearer generado anteriormente.
Headers
| Header | Tipo | Requerido | Descripción |
|---|---|---|---|
| Authorization | string | ✓ | Token Bearer obtenido del endpoint /token/generate |
| Content-Type | string | ✓ | Debe ser application/json |
Parámetros del Body
| Parámetro | Tipo | Requerido | Max. Length | Descripción |
|---|---|---|---|---|
| rates | object | ✓ | - | Objeto contenedor de todos los parámetros de cotización |
| rates.shippingService | string | - | 10 | Nombre del servicio de envío del cual quieres obtener las tarifas. Si no se especifica, devuelve tarifas de todos los servicios disponibles |
| rates.shipper | object | ✓ | - | Información del remitente (almacén) |
| rates.shipper.warehouse_id | integer | ✓ | 10 | ID del almacén desde el cual se enviarán los productos |
| rates.recipient | object | ✓ | - | Información del destinatario |
| rates.recipient.address | object | ✓ | - | Dirección del destinatario |
| rates.recipient.address.addressLine | string | - | 35 | Dirección de entrega del envío, necesaria solo si consultas UPS |
| rates.recipient.address.postalCode | string | ✓ | 10 | Código postal de destino |
| rates.recipient.address.countryCode | string | ✓ | 2 | Código de país de dos letras. Por defecto 'US' |
| rates.packageItems | array | ✓ | 99 | Uno o más paquetes con sus descripciones de atributos |
| rates.packageItems[].weight | object | ✓ | - | Peso del paquete |
| rates.packageItems[].weight.units | string | ✓ | - | Unidad de peso. Valores válidos: 'KG' o 'LB' |
| rates.packageItems[].weight.value | double | ✓ | 99 | Valor del peso del paquete |
Ejemplos
cURL
curl -X POST https://apisandbox.eonwms.com/v1/client/shipment/rates \
-H "Authorization: Bearer TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"rates": {
"shippingService": "FEDEX",
"shipper": {
"warehouse_id": 3
},
"recipient": {
"address": {
"addressLine": "123 Main St",
"postalCode": "77384",
"countryCode": "US"
}
},
"packageItems": [
{
"weight": {
"units": "LB",
"value": 3
}
}
]
}
}'
JavaScript
const rateRequest = {
rates: {
shippingService: "FEDEX", // Opcional, omitir para obtener todas las tarifas
shipper: {
warehouse_id: 3 // Almacén en USA
},
recipient: {
address: {
addressLine: "123 Main St", // Requerido solo para UPS
postalCode: "77384",
countryCode: "US"
}
},
packageItems: [
{
weight: {
units: "LB",
value: 3
}
}
]
}
};
const response = await fetch('https://apisandbox.eonwms.com/v1/client/shipment/rates', {
method: 'POST',
headers: {
'Authorization': 'Bearer TU_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify(rateRequest)
});
const rates = await response.json();
console.log(`Tarifa total: $${rates.totalNetCharge} USD`);
Python
import requests
rate_request = {
"rates": {
"shippingService": "FEDEX", # Opcional
"shipper": {
"warehouse_id": 3 # Almacén en USA
},
"recipient": {
"address": {
"addressLine": "123 Main St", # Requerido solo para UPS
"postalCode": "77384",
"countryCode": "US"
}
},
"packageItems": [
{
"weight": {
"units": "LB",
"value": 3
}
}
]
}
}
response = requests.post(
'https://apisandbox.eonwms.com/v1/client/shipment/rates',
headers={
'Authorization': 'Bearer TU_TOKEN',
'Content-Type': 'application/json'
},
json=rate_request
)
rates = response.json()
print(f"Tarifa total: ${rates['totalNetCharge']} USD")
Respuestas
200 - Éxito
{
"status": 200,
"rateType": "LIST",
"totalDiscounts": 0,
"totalBaseCharge": 14.38,
"totalNetCharge": 21.9,
"shipmentDetail": {
"rateZone": "5",
"totalBillingWeight": {
"units": "LB",
"value": 3
},
"currency": "USD"
}
}
401 - No autorizado
{
"code": 401,
"fault": {
"arguments": {
"Authorization": "invalid"
},
"type": "InvalidAuthorizationException",
"message": "La solicitud no está autorizada, el token de acceso es inválido."
}
}
422 - Sin cobertura de entrega
{
"code": 422,
"fault": {
"arguments": {
"postalCode": "00000"
},
"type": "getRates.noDeliveryCoverage",
"message": "El servicio de FedEx no está disponible actualmente para esta combinación de origen/destino."
}
}
Estructura de la Respuesta
Campos Principales
- status: Código de estado HTTP
- rateType: Tipo de tarifa (generalmente "LIST")
- totalDiscounts: Descuentos aplicados
- totalBaseCharge: Cargo base sin impuestos ni recargos
- totalNetCharge: Cargo total a pagar (incluye todos los cargos)
Detalles del Envío
El objeto shipmentDetail incluye:
- rateZone: Zona tarifaria (1-8 para envíos domésticos en USA)
- totalBillingWeight: Peso de facturación
- units: Unidad de peso (LB o KG)
- value: Valor del peso
- currency: Moneda (siempre USD)
Consideraciones de Peso
Peso Dimensional vs Peso Real
FedEx y otros transportistas usan el mayor entre:
- Peso real: El peso físico del paquete
- Peso dimensional: (Largo × Ancho × Alto) / Factor dimensional
- FedEx Ground: 139
- FedEx Express: 139
- UPS: 166 (puede variar)
Ejemplo de Cálculo
// Calcular peso dimensional
function calcularPesoDimensional(largo, ancho, alto, factor = 139) {
const volumen = largo * ancho * alto;
const pesoDimensional = volumen / factor;
return Math.ceil(pesoDimensional);
}
// Ejemplo: Caja de 16" x 12" x 10"
const pesoDim = calcularPesoDimensional(16, 12, 10); // = 14 lbs
const pesoReal = 3; // 3 lbs
// FedEx cobrará por 14 lbs (el mayor)
Múltiples Paquetes
Para cotizar envíos con múltiples paquetes:
const multiPackageRequest = {
rates: {
shipper: {
warehouse_id: 3
},
recipient: {
address: {
postalCode: "77384",
countryCode: "US"
}
},
packageItems: [
{
weight: {
units: "LB",
value: 5
}
},
{
weight: {
units: "LB",
value: 3
}
},
{
weight: {
units: "LB",
value: 10
}
}
]
}
};
Almacenes Disponibles en USA
Para usar este endpoint necesitas un almacén en Estados Unidos. Consulta los almacenes disponibles con el endpoint Get Available Warehouses.
Para obtener tarifas de envío en México:
- Las tarifas están predefinidas por contrato
- Contacta a soporte para obtener tu tabla de tarifas
- Usa el servicio de envío apropiado al crear la orden
Comparación de Servicios
Si no especificas shippingService, el endpoint puede devolver tarifas para múltiples servicios, permitiéndote comparar:
- FedEx Ground: Más económico, 1-5 días hábiles
- FedEx Express: Más rápido, entrega al siguiente día
- UPS Ground: Alternativa a FedEx Ground
- UPS Next Day Air: Entrega garantizada al siguiente día