Comprehensive guide to consume the logistics system services
Guía completa para consumir los servicios del sistema logístico
Welcome to the Logistics API. This system allows you to manage orders, products, and geographic data using standard HTTP requests.
Bienvenido a la API de Logística. Este sistema te permite gestionar pedidos, productos y datos geográficos usando peticiones HTTP estándar.
/api (relative to your installation)YYYY-MM-DD HH:MM:SS unless otherwise specified./api (relativo a tu instalación)YYYY-MM-DD HH:MM:SS a menos que se especifique lo contrario.Every API response follows this consistent JSON structure:
Toda respuesta de la API sigue esta estructura JSON consistente:
{
"success": true, // boolean: did the request succeed?
"message": "Operation...", // string: human-readable message
"data": { ... } // object/array: the requested payload
}
{
"success": false,
"message": "Invalid credentials",
"error_code": 401 // optional: numeric error code
}
Endpoints that return lists (Orders, Products) support pagination via query parameters.
Los endpoints que retornan listas (Pedidos, Productos) soportan paginación vía parámetros GET.
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Current page number |
limit | integer | 20 | Items per page |
| Parámetro | Tipo | Defecto | Descripción |
|---|---|---|---|
page | entero | 1 | Número de página actual |
limit | entero | 20 | Elementos por página |
{
"success": true,
"data": [ ... ],
"pagination": {
"total": 150,
"page": 1,
"limit": 20,
"total_pages": 8
}
}
Use these IDs when filtering or updating order statuses.
Usa estos IDs al filtrar o actualizar estados de pedidos.
| ID | Status NameNombre Estado | DescriptionDescripción |
|---|---|---|
1 | En bodega | Initial status, order received at warehouse.Estado inicial, pedido recibido en bodega. |
2 | En ruta o proceso | Order is being delivered.El pedido está en camino. |
3 | Entregado | Order successfully delivered.Pedido entregado exitosamente. |
4 | Reprogramado | Delivery rescheduled for another day/time.Entrega reprogramada para otro día/hora. |
5 | Domicilio cerrado | Delivery failed: location closed.Falló entrega: lugar cerrado. |
6 | No hay quien reciba | Delivery failed: no recipient available.Falló entrega: nadie para recibir. |
7 | Devuelto | Order returned to warehouse.Pedido devuelto a bodega. |
8 | Domicilio no encontrado | Address could not be located.No se encontró la dirección. |
9 | Rechazado | Customer rejected the order.Cliente rechazó el pedido. |
10 | No puede pagar recaudo | Customer unable to pay on delivery.Cliente no pudo pagar al recibir. |
To perform write operations (create orders, products, etc.), you must obtain a JWT token.
Para realizar operaciones de escritura (crear pedidos, productos, etc.), debes obtener un token JWT.
| Field | Type | Required | Description |
|---|---|---|---|
email | string | ✅ Yes | Registered user email |
password | string | ✅ Yes | User password |
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
email | string | ✅ Sí | Email del usuario registrado |
password | string | ✅ Sí | Contraseña del usuario |
curl -X POST "http://localhost/paqueteriacz/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com", "password":"secure_password"}'
{
"success": true,
"message": "Login exitoso",
"data": {
"token": "eyJ0e... (your_token_here) ... "
}
}
Include the token in the Authorization header for subsequent requests.
Incluye el token en el encabezado Authorization para las siguientes peticiones.
Returns paginated list of orders.
Returns full details of a specific order by Internal ID.
Create a new delivery order. The system automatically validates stock, calculates pricing, and enforces security rules based on user role.
Crea un nuevo pedido de entrega. El sistema valida automáticamente el stock, calcula precios y aplica reglas de seguridad según el rol del usuario.
| Field | Type | Validation | Description |
|---|---|---|---|
numero_orden | integer | Unique, positive | Unique external order ID |
destinatario | string | Not empty | Recipient's full name |
producto_id or productos | int/array | Must exist in DB | Single product ID or array of products |
| Campo | Tipo | Validación | Descripción |
|---|---|---|---|
numero_orden | entero | Único, positivo | ID externo único del pedido |
destinatario | string | No vacío | Nombre completo del destinatario |
producto_id o productos | int/array | Debe existir en BD | ID de producto único o array de productos |
| Field | Type | Default | Description |
|---|---|---|---|
telefono | string | '' | Contact phone number |
direccion | string | '' | Full delivery address |
comentario | string | null | Additional delivery notes |
coordenadas | string | null | GPS format: "lat,long" (e.g. "14.6349,-90.5069") |
latitud | float | null | Latitude (alternative to coordenadas) |
longitud | float | null | Longitude (alternative to coordenadas) |
| Campo | Tipo | Defecto | Descripción |
|---|---|---|---|
telefono | string | '' | Teléfono de contacto |
direccion | string | '' | Dirección completa de entrega |
comentario | string | null | Notas adicionales de entrega |
coordenadas | string | null | Formato GPS: "lat,long" (ej. "14.6349,-90.5069") |
latitud | float | null | Latitud (alternativa a coordenadas) |
longitud | float | null | Longitud (alternativa a coordenadas) |
| Field | Type | Description |
|---|---|---|
id_pais or pais | integer | Country ID |
id_departamento or departamento | integer | State/Department ID |
id_municipio or municipio | integer | City/Municipality ID |
id_barrio or barrio | integer | Neighborhood/District ID |
zona | string | Zone name |
| Campo | Tipo | Descripción |
|---|---|---|
id_pais o pais | entero | ID del país |
id_departamento o departamento | entero | ID del departamento/estado |
id_municipio o municipio | entero | ID del municipio/ciudad |
id_barrio o barrio | entero | ID del barrio/zona |
zona | string | Nombre de la zona |
| Field | Type | Default | Description |
|---|---|---|---|
id_estado | integer | 1 | Order status (see Status Reference) |
id_vendedor | integer | null | Assigned delivery person |
id_proveedor | integer | null | Provider ID (auto-set for Provider role) |
id_cliente | integer | null | Client ID |
id_moneda | integer | null | Currency ID (auto-detected from provider's country if not provided) |
| Campo | Tipo | Defecto | Descripción |
|---|---|---|---|
id_estado | entero | 1 | Estado del pedido (ver Referencia de Estados) |
id_vendedor | entero | null | Repartidor asignado |
id_proveedor | entero | null | ID del proveedor (auto-asignado para rol Proveedor) |
id_cliente | entero | null | ID del cliente |
id_moneda | entero | null | ID de la moneda (auto-detectada del país del proveedor si no se envía) |
| Field | Type | Auto-calculated | Description |
|---|---|---|---|
precio_total_local | decimal | No | Total price in local currency |
precio_total_usd | decimal | Yes* | Total price in USD (auto-calc if local + currency provided) |
tasa_conversion_usd | decimal | Yes* | Exchange rate used (auto-fetched from currency) |
es_combo | boolean | Yes* | Whether it's a combo (auto-detected from product) |
| Campo | Tipo | Auto-calculado | Descripción |
|---|---|---|---|
precio_total_local | decimal | No | Precio total en moneda local |
precio_total_usd | decimal | Sí* | Precio total en USD (auto-calc si local + moneda) |
tasa_conversion_usd | decimal | Sí* | Tasa de cambio usada (auto desde moneda) |
es_combo | boolean | Sí* | Si es combo (auto-detectado desde producto) |
Provider Role: If authenticated user is a Provider (role 4), the system automatically sets id_proveedor to their user ID, ignoring any value sent in the request.
Rol Proveedor: Si el usuario autenticado es Proveedor (rol 4), el sistema automáticamente asigna id_proveedor a su ID de usuario, ignorando cualquier valor enviado en la petición.
{
"numero_orden": 12345,
"destinatario": "Juan Pérez",
"producto_id": 10,
"cantidad": 2
}
{
"numero_orden": 12346,
"destinatario": "María García",
"telefono": "50212345678",
"direccion": "Calle Principal #123",
"coordenadas": "14.6349,-90.5069",
"comentario": "Entregar en horario de oficina",
"id_pais": 1,
"id_departamento": 5,
"id_municipio": 25,
"id_proveedor": 8,
"id_cliente": 15,
"id_moneda": 2,
"es_combo": 1,
"precio_total_local": 150.00,
"productos": [
{ "producto_id": 10, "cantidad": 2 },
{ "producto_id": 15, "cantidad": 1 }
]
}
{
"numero_orden": 10050,
"destinatario": "Maria Gonzalez",
"telefono": "8888-8888",
"direccion": "Bello Horizonte C-4",
"es_combo": 0,
"coordenadas": "12.1345,-86.2456",
"productos": [
{ "producto_id": 1, "cantidad": 2 },
{ "producto_id": 5, "cantidad": 1 }
]
}
When to use: Regular sales where items are sold at their list price.
Logic: The system automatically sums up (product_price × quantity).
Don't send: precio_total (it will be ignored/overwritten).
{
"numero_orden": "STD-101",
"es_combo": 0,
"productos": [
{ "producto_id": 1, "cantidad": 2 }
]
// Total calculated by system:
// (Price of ID 1 × 2)
}
When to use: Special offers, bundles, or fixed-price packages.
Logic: You MUST define the precio_total_local explicitly.
Important: Set es_combo: 1 so the system respects your total.
{
"numero_orden": "PROMO-500",
"es_combo": 1,
"precio_total_local": 999.00,
"productos": [
{ "producto_id": 1, "cantidad": 1 },
{ "producto_id": 5, "cantidad": 1 }
]
// System accepts 999.00
// ignoring individual prices.
}
Import multiple orders efficiently. Use auto_enqueue=true to process in background.
Importa múltiples pedidos eficientemente. Usa auto_enqueue=true para procesar en segundo plano.
{
"success": true,
"message": "Proceso iniciado",
"results": [
{ "numero_orden": 10050, "success": true, "job_queued": true },
{ "numero_orden": 10051, "success": true, "job_queued": true }
]
}
{
"pedidos": [
{
// Pedido multiproducto estándar
"numero_orden": 20001,
"destinatario": "Juan Perez",
"telefono": "5555-5555",
"direccion": "Calle Principal #123",
"coordenadas": "12.1234,-86.1234",
"productos": [
{ "producto_id": 1, "cantidad": 2 },
{ "producto_id": 5, "cantidad": 1 }
]
},
{
// Pedido tipo COMBO (Precio fijo total)
"numero_orden": 20002,
"destinatario": "Ana Lopez",
"telefono": "7777-7777",
"direccion": "Residencial Los Arcos, Casa 5",
"coordenadas": "12.1255,-86.1255",
"es_combo": 1,
"precio_total_local": 1500.00, // Precio fijo total
"precio_total_usd": 40.50, // Opcional si se calcula, pero recomendado en combos
"productos": [
{ "producto_id": 10, "cantidad": 1 },
{ "producto_id": 11, "cantidad": 1 },
{ "producto_id": 12, "cantidad": 1 }
]
}
]
}
List all available products with current stock.
Listar todos los productos disponibles con stock actual.
Crear un nuevo producto.
{
"id": 1,
"nombre": "Protein Shake",
"precio_usd": "45.00",
"stock_total": 150,
"descripcion": "High quality whey protein"
}
id param or check PHP config for PUT support.
{
"id": 1,
"nombre": "Protein Shake V2",
"precio_usd": 48.00,
"descripcion": "New formula"
}
Retrieve reference data for dropdowns (Countries, Departments, Municipalities).
Obtener datos de referencia para listas desplegables (Países, Departamentos, Municipios).
{
"success": true,
"data": {
"paises": [ ... ],
"departamentos": [ ... ],
"municipios": [ ... ],
"barrios": [ ... ]
}
}
Endpoints to manage reference data. All accept POST for creation/update.
Endpoints para gestionar datos de referencia. Todos aceptan POST para crear/actualizar.
| Resource | Method | Endpoint | Params (JSON) |
|---|---|---|---|
| Countries | POST | /api/geoinfo/paises |
{ "nombre": "...", "codigo_iso": "..." } |
| Departments | POST | /api/geoinfo/departamentos |
{ "nombre": "...", "id_pais": 1 } |
| Municipalities | POST | /api/geoinfo/municipios |
{ "nombre": "...", "id_departamento": 1 } |
| Neighborhoods | POST | /api/geoinfo/barrios |
{ "nombre": "...", "id_municipio": 1 } |
action parameter:
Para Actualizar o Eliminar, pasa el parámetro action:
{ "action": "update", "id": 1, "nombre": "New Name" }{ "action": "delete", "id": 1 }
Specialized endpoints for the end-customer mobile/web app.
Endpoints especializados para la app móvil/web del cliente final.
Get list of orders belonging to the authenticated client.
Obtener lista de pedidos pertenecientes al cliente autenticado.
{
"success": true,
"data": [
{
"id": 100,
"numero_orden": "ORD-2025-001",
"estado": "En ruta",
"productos": "Producto A (x2)"
}
]
}
Allows clients to mark orders as delivered or returned (if permitted).
Permite a los clientes marcar pedidos como entregados o devueltos (si está permitido).
| Field | Required | Description |
|---|---|---|
id_pedido | Yes | Internal Order ID |
estado | Yes | New Status ID (e.g., 3 for Delivered) |
motivo | No | Reason/Comment |
{
"id_pedido": 100,
"estado": 3,
"motivo": "Recibido conforme"
}