Envíos y Transportistas
La API de Envíos te permite calcular tarifas de transporte basadas en dimensiones y peso del paquete, crear envíos asociados a órdenes de compra, generar etiquetas de envío y actualizar la información de seguimiento.
Estructura de Dirección (Address)
Varios endpoints de la API requieren o devuelven un objeto de dirección estructurado con los siguientes campos:
{
"name": "Juan Pérez",
"line1": "Av. Larco 123",
"line2": "Dpto 402",
"city": "Lima",
"state": "Lima",
"postal_code": "15074",
"country": "PE",
"phone": "+51999888777"
}
- Campos requeridos:
name,line1,city,postal_code,country(código de país ISO 3166-1 alfa-2 de 2 letras).
Calcular Tarifas
Permite consultar las tarifas de envío y los tiempos estimados de entrega ofrecidos por los transportistas integrados (ej. DHL, FedEx, Olva Courier).
POST /shipping/rates/calculate
Payload de entrada:
{
"weight_g": 1500,
"length_cm": 30,
"width_cm": 20,
"height_cm": 15,
"origin_address": {
"name": "Almacén Central",
"line1": "Calle Falsa 123",
"city": "Lima",
"postal_code": "15001",
"country": "PE"
},
"destination_address": {
"name": "María Gómez",
"line1": "Calle Las Flores 456",
"city": "Arequipa",
"postal_code": "04001",
"country": "PE"
}
}
Respuesta 200 OK: Retorna un arreglo de tarifas disponibles.
[
{
"id": "a9c3d2b2-f046-40d3-852f-423089c73ba3",
"tenant_id": "8a1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"carrier": "olva_courier",
"service_name": "Olva Express Nacional",
"service_code": "olva_express",
"currency": "PEN",
"amount": 1500,
"estimated_days": 2,
"weight_g": 1500,
"origin_country": "PE",
"destination_country": "PE",
"created_at": "2026-06-02T20:45:00Z",
"updated_at": "2026-06-02T20:45:00Z"
}
]
Envíos (Shipments)
Crear envío
Genera un nuevo registro de envío (shipment) vinculado a una orden. Inicialmente se crea en estado draft o pending.
POST /shipping/shipments
Payload de entrada:
{
"order_id": "42c3d0b2-4d2b-42fa-9d10-8b1b8b6a7a50",
"carrier": "olva_courier",
"service_code": "olva_express",
"weight_g": 1500,
"length_cm": 30,
"width_cm": 20,
"height_cm": 15,
"origin_address": {
"name": "Almacén Central",
"line1": "Calle Falsa 123",
"city": "Lima",
"postal_code": "15001",
"country": "PE"
},
"destination_address": {
"name": "María Gómez",
"line1": "Calle Las Flores 456",
"city": "Arequipa",
"postal_code": "04001",
"country": "PE"
}
}
Respuesta 201 Created:
{
"id": "f8d3d2b2-f046-40d3-852f-423089c73ba3",
"tenant_id": "8a1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"order_id": "42c3d0b2-4d2b-42fa-9d10-8b1b8b6a7a50",
"carrier": "olva_courier",
"service_code": "olva_express",
"status": "pending",
"origin_address": {
"name": "Almacén Central",
"line1": "Calle Falsa 123",
"city": "Lima",
"postal_code": "15001",
"country": "PE"
},
"destination_address": {
"name": "María Gómez",
"line1": "Calle Las Flores 456",
"city": "Arequipa",
"postal_code": "04001",
"country": "PE"
},
"weight_g": 1500,
"dimensions": {
"length_cm": 30,
"width_cm": 20,
"height_cm": 15
},
"events": [],
"created_at": "2026-06-02T20:45:00Z",
"updated_at": "2026-06-02T20:45:00Z"
}
Listar envíos
GET /shipping/shipments
Obtener envío
GET /shipping/shipments/:id
Muestra toda la información del envío, incluyendo el estado actual (pending, label_generated, shipped, delivered, failed), el número de seguimiento (tracking number) y la lista histórica de eventos de rastreo.
Generar Etiqueta de Envío
Asocia el número de seguimiento oficial del transportista y el enlace al documento PDF/imagen de la etiqueta de envío. Cambia el estado del envío a label_generated.
POST /shipping/shipments/:id/label
Payload de entrada:
{
"tracking_number": "OLVA987654321",
"label_url": "https://storage.omnibuy.net/labels/olva987654321.pdf"
}
Respuesta 200 OK: Retorna el envío actualizado.
Actualizar Seguimiento (Tracking)
Añade un nuevo evento en el historial de tránsito del envío (ej. "En sucursal", "En ruta de entrega").
PATCH /shipping/shipments/:id/tracking
Payload de entrada:
{
"status": "shipped",
"location": "Centro de Distribución Lima Sur",
"description": "El paquete ha salido rumbo a la ciudad de destino.",
"timestamp": "2026-06-02T22:00:00Z"
}
Respuesta 200 OK: Retorna el envío actualizado con el nuevo evento en la lista de events.
Marcar como Entregado
Establece el estado final del envío como entregado (delivered).
POST /shipping/shipments/:id/delivered
Respuesta 200 OK
Marcar como Fallido
Establece el estado del envío como fallido (failed) e indica el motivo de la imposibilidad de entrega.
POST /shipping/shipments/:id/failed
Payload de entrada:
{
"reason": "Destinatario ausente tras 3 visitas"
}
Respuesta 200 OK