Documentación de API
API RESTful moderna para integrar envíos multi-carrier en minutos
Autenticación
Todas las peticiones requieren un API Key en el header de autorización:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
X-API-Version: v1
Base URL: https://api.shipphub.com
Endpoints Principales
Cotizar tarifas de envío
Obtén cotizaciones en tiempo real de múltiples carriers con una sola llamada.
Request Body:
{
"origin": {
"country": "MX",
"state": "Jalisco",
"city": "Guadalajara",
"postal_code": "44100",
"address": "Av. Americas 1500"
},
"destination": {
"country": "MX",
"state": "CDMX",
"city": "Ciudad de México",
"postal_code": "06600",
"address": "Av. Reforma 100"
},
"parcels": [
{
"weight": 2.5,
"weight_unit": "kg",
"length": 30,
"width": 20,
"height": 15,
"distance_unit": "cm"
}
],
"insurance": {
"enabled": true,
"amount": 1500.00,
"currency": "MXN"
}
}
📖 Ver descripción de campos
Dirección de origen del envío.
country- Código ISO del país (MX, US, etc.)state- Estado o provinciacity- Ciudadpostal_code- Código postaladdress- Dirección completa
Dirección de destino del envío. Misma estructura que origin.
Lista de paquetes a enviar.
weight- Peso del paquete (número decimal)weight_unit- Unidad de peso (kg, lb)length- Largo en centímetroswidth- Ancho en centímetrosheight- Alto en centímetrosdistance_unit- Unidad de distancia (cm, in)
Configuración de seguro para el envío.
enabled- Si se requiere seguro (boolean)amount- Valor asegurado (número)currency- Moneda (MXN, USD, etc.)
Response (200 OK):
{
"status": "success",
"data": {
"rates": [
{
"carrier": "fedex",
"service": "FEDEX_GROUND",
"service_name": "FedEx Terrestre",
"total_price": 185.50,
"currency": "MXN",
"estimated_days": 3,
"insurance_cost": 15.00
},
{
"carrier": "dhl",
"service": "DHL_EXPRESS",
"service_name": "DHL Express",
"total_price": 245.00,
"currency": "MXN",
"estimated_days": 1,
"insurance_cost": 18.00
}
]
},
"meta": {
"trace_id": "req_abc123xyz",
"timestamp": "2026-02-20T10:30:00Z"
}
}
📖 Ver descripción de respuesta
Lista de cotizaciones disponibles de diferentes carriers.
carrier- Identificador del carrier (fedex, dhl, ups)service- Código del servicioservice_name- Nombre legible del serviciototal_price- Precio total incluyendo segurocurrency- Moneda del precioestimated_days- Días estimados de entregainsurance_cost- Costo del seguro
Crear envío y generar etiqueta
Crea un envío, genera la guía y obtén el número de rastreo instantáneamente.
Request Body:
{
"rate_id": "rate_fedex_abc123",
"shipper": {
"name": "Mi Empresa SA",
"company": "Mi Empresa",
"email": "envios@miempresa.com",
"phone": "+52 33 1234 5678",
"address": {
"street": "Av. Americas 1500",
"city": "Guadalajara",
"state": "Jalisco",
"postal_code": "44100",
"country": "MX"
}
},
"recipient": {
"name": "Juan Pérez",
"email": "juan@example.com",
"phone": "+52 55 9876 5432",
"address": {
"street": "Av. Reforma 100",
"city": "Ciudad de México",
"state": "CDMX",
"postal_code": "06600",
"country": "MX"
}
},
"parcels": [
{
"weight": 2.5,
"weight_unit": "kg",
"length": 30,
"width": 20,
"height": 15,
"distance_unit": "cm",
"description": "Electrónicos"
}
],
"customs": {
"content_type": "merchandise",
"content_description": "Productos electrónicos",
"incoterm": "DAP",
"items": [
{
"description": "Laptop",
"quantity": 1,
"value": 15000.00,
"currency": "MXN",
"weight": 2.5,
"weight_unit": "kg",
"origin_country": "MX"
}
]
},
"options": {
"signature_required": true,
"saturday_delivery": false,
"insurance": {
"enabled": true,
"amount": 15000.00,
"currency": "MXN"
}
},
"metadata": {
"order_id": "ORD-12345",
"customer_reference": "REF-ABC"
}
}
📖 Ver descripción de campos
ID de la tarifa obtenida previamente del endpoint /v1/rates.
Información del remitente.
name- Nombre completo o razón socialcompany- Nombre de la empresaemail- Email de contactophone- Teléfono con código de paísaddress- Objeto con dirección completa
Información del destinatario. Misma estructura que shipper.
Lista de paquetes. Similar a /v1/rates pero incluye description.
Información aduanal para envíos internacionales.
content_type- Tipo de contenido (merchandise, documents, gift, etc.)incoterm- Término comercial internacional (DAP, DDP, etc.)items- Lista detallada de productos
Opciones adicionales del envío (firma requerida, entrega en sábado, seguro).
Datos adicionales para tu referencia (no se envían al carrier).
Response (201 Created):
{
"status": "success",
"data": {
"shipment_id": "shp_xyz789",
"tracking_number": "1234567890",
"carrier": "fedex",
"service": "FEDEX_GROUND",
"label_url": "https://api.shipphub.com/labels/shp_xyz789.pdf",
"status": "created",
"estimated_delivery": "2026-02-23T18:00:00Z",
"total_cost": 185.50,
"currency": "MXN"
},
"meta": {
"trace_id": "req_def456uvw",
"timestamp": "2026-02-20T10:35:00Z"
}
}
📖 Ver descripción de respuesta
Información del envío creado.
shipment_id- ID único del envío en ShippHubtracking_number- Número de rastreo del carriercarrier- Carrier seleccionadolabel_url- URL para descargar la etiqueta en PDFstatus- Estado actual del envíoestimated_delivery- Fecha estimada de entrega (ISO 8601)total_cost- Costo total del envío
Rastrear envío en tiempo real
Consulta el estado actual de cualquier envío con eventos detallados de tránsito.
Request Example:
GET /v1/tracking/1234567890
Authorization: Bearer YOUR_API_KEY
📖 Ver descripción de parámetros
Número de rastreo del envío obtenido al crear el shipment.
Response (200 OK):
{
"status": "success",
"data": {
"tracking_number": "1234567890",
"carrier": "fedex",
"status": "in_transit",
"status_detail": "En ruta hacia destino",
"estimated_delivery": "2026-02-23T18:00:00Z",
"origin": {
"city": "Guadalajara",
"state": "Jalisco",
"country": "MX"
},
"destination": {
"city": "Ciudad de México",
"state": "CDMX",
"country": "MX"
},
"events": [
{
"timestamp": "2026-02-20T10:35:00Z",
"status": "created",
"description": "Etiqueta creada",
"location": {
"city": "Guadalajara",
"state": "Jalisco",
"country": "MX"
}
},
{
"timestamp": "2026-02-20T14:20:00Z",
"status": "picked_up",
"description": "Paquete recolectado",
"location": {
"city": "Guadalajara",
"state": "Jalisco",
"country": "MX"
}
},
{
"timestamp": "2026-02-21T08:15:00Z",
"status": "in_transit",
"description": "En ruta hacia destino",
"location": {
"city": "Querétaro",
"state": "Querétaro",
"country": "MX"
}
}
]
},
"meta": {
"trace_id": "req_ghi789rst",
"timestamp": "2026-02-21T10:00:00Z"
}
}
📖 Ver descripción de respuesta
Información del rastreo del envío.
tracking_number- Número de rastreocarrier- Carrier del envíostatus- Estado actual (created, picked_up, in_transit, delivered, etc.)status_detail- Descripción detallada del estadoestimated_delivery- Fecha estimada de entregaevents- Historial completo de eventos del envío
Lista cronológica de eventos del envío.
timestamp- Fecha y hora del evento (ISO 8601)status- Estado del eventodescription- Descripción del eventolocation- Ubicación donde ocurrió el evento
Listar envíos con filtros
Obtén un listado paginado de tus envíos con opciones de filtrado.
Query Parameters:
page- Número de página (default: 1)per_page- Registros por página (default: 20, max: 100)status- Filtrar por estado (created, in_transit, delivered, etc.)carrier- Filtrar por carrier (fedex, dhl, ups, etc.)from_date- Fecha desde (ISO 8601)to_date- Fecha hasta (ISO 8601)
Request Example:
GET /v1/shipments?page=1&per_page=10&status=in_transit&carrier=fedex
Authorization: Bearer YOUR_API_KEY
Response (200 OK):
{
"status": "success",
"data": {
"shipments": [
{
"shipment_id": "shp_xyz789",
"tracking_number": "1234567890",
"carrier": "fedex",
"service": "FEDEX_GROUND",
"status": "in_transit",
"created_at": "2026-02-20T10:35:00Z",
"estimated_delivery": "2026-02-23T18:00:00Z"
}
],
"pagination": {
"current_page": 1,
"per_page": 10,
"total": 45,
"total_pages": 5,
"has_more": true
}
},
"meta": {
"trace_id": "req_jkl012mno",
"timestamp": "2026-02-21T11:00:00Z"
}
}
Respuestas de Error
Todos los errores siguen el mismo formato estándar:
400 Bad Request:
{
"status": "error",
"error": {
"code": "VALIDATION_ERROR",
"message": "Datos de entrada inválidos",
"details": {
"origin.postal_code": ["El código postal es requerido"],
"parcels.0.weight": ["El peso debe ser mayor a 0"]
}
},
"meta": {
"trace_id": "req_error123",
"timestamp": "2026-02-20T10:40:00Z"
}
}
401 Unauthorized:
{
"status": "error",
"error": {
"code": "UNAUTHORIZED",
"message": "API Key inválida o expirada"
}
}
429 Too Many Requests:
{
"status": "error",
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Límite de peticiones excedido",
"retry_after": 60
}
}
Límites de Uso
¿Listo para comenzar?
Solicita acceso a la API y recibe tus credenciales en menos de 24 horas
Solicitar Acceso Ahora