API de Rutery
Automatiza la creación y seguimiento de órdenes desde cualquier sistema: POS, CRM, bots de WhatsApp, tiendas online o scripts propios. Con cotización previa, tracking público y webhooks firmados.
https://rutery.com/api/v1
Autenticación
Todas las peticiones requieren un header Authorization con formato Bearer:
Authorization: Bearer TU_API_KEY
Tu API key se genera automáticamente al crear tu cuenta de comercio. Puedes regenerarla desde tu portal en Perfil → API Key.
Endpoints
/quote
RECOMENDADO ANTES DE CREAR
Calcula el costo de un envío sin crear la orden. Devuelve el desglose completo. Útil para bots que necesitan dar precio al cliente antes del pago.
Body (JSON):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| direccion_destino | string | * | Dirección de entrega |
| lat_destino / lng_destino | float | No | Coordenadas exactas (evita geocoding) |
* Si no envías coordenadas, se requiere direccion_destino.
Ejemplo:
curl -X POST https://rutery.com/api/v1/quote \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"direccion_destino": "Av. Principal, Chacao"}'
Respuesta (200):
{
"ok": true,
"direccion_destino": "Av. Principal, Chacao, Caracas",
"lat_destino": 10.4967,
"lng_destino": -66.8512,
"distancia_km": 2.4,
"costo_envio_usd": 1.42,
"costo_envio_ves": 1272.49,
"tasa_cambio_usada": 896.12,
"desglose": {
"base": 1.00,
"subtotal_segmentos": 0.42,
"recargos_aplicados": [],
"monto_recargos": 0
}
}
/orders/create
Crea una nueva orden. La orden se asigna automáticamente a un rider disponible. Devuelve el tracking_url listo para compartir con el cliente.
Body (JSON):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| cliente_final_nombre | string | Sí | Nombre del destinatario |
| cliente_final_telefono | string | Sí | Teléfono en formato internacional |
| direccion_destino | string | Sí | Dirección de entrega |
| lat_destino / lng_destino | float | No | Coordenadas (evita el geocoding) |
| codigo_externo | string | No | Tu ID interno (evita duplicados) |
| notas | string | No | Instrucciones para el rider |
Ejemplo:
curl -X POST https://rutery.com/api/v1/orders/create \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cliente_final_nombre": "María López",
"cliente_final_telefono": "+584141234567",
"direccion_destino": "Av. Principal, Chacao",
"codigo_externo": "PEDIDO-1042"
}'
Respuesta (201):
{
"ok": true,
"orden": {
"id": 1042,
"codigo_externo": "PEDIDO-1042",
"estatus": "ASIGNADA",
"costo_envio_usd": 1.42,
"costo_envio_ves": 1272.49,
"tasa_cambio_usada": 896.12,
"jornada_id": 15,
"created_at": "2026-11-07 15:30:00",
"tracking_url": "https://rutery.com/rastrear/a1b2c3d4e5f6...z9"
}
}
tracking_url contiene un enlace público que puedes enviarle al cliente. El cliente verá el mapa con el rider en vivo, sin necesidad de cuenta ni login.
/orders/{id}/status
Consulta el estado actual de una orden. La respuesta incluye el tracking_url actualizado.
curl https://rutery.com/api/v1/orders/1042/status \
-H "Authorization: Bearer TU_API_KEY"
/orders
Lista las órdenes con filtros opcionales.
Query params:
desde— YYYY-MM-DDhasta— YYYY-MM-DDestado— PENDIENTE, ASIGNADA, ENTREGADA, etc. (separar por coma)numero— ID de la ordencliente_nombre— Búsqueda parciallimit/offset— Paginación (max 100)
/orders/{id}/cancel
Cancela una orden. Solo funciona si está en PENDIENTE, ASIGNADA, EN_REPOSO o SIN_RIDER_DISPONIBLE.
curl -X POST https://rutery.com/api/v1/orders/1042/cancel \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"motivo": "Cliente canceló el pedido"}'
/jornadas
Endpoints disponibles:
GET /jornadas/activa— Jornada en cursoGET /jornadas— Listado con filtrosGET /jornadas/{id}— Detalle con órdenes
Webhooks
Si configuras una webhook_url en tu comercio, te enviaremos un POST con cada cambio de estado de tus órdenes. Ideal para que tu bot notifique automáticamente al cliente.
Eventos disponibles:
order.created— Orden creadaorder.assigned— Rider asignadoorder.at_pickup— Rider llegó al comercioorder.on_way— Rider en camino al clienteorder.delivered— Entregadoorder.cancelled— Cancelado
Payload recibido:
{
"evento": "order.delivered",
"orden_id": 1042,
"codigo_externo": "PEDIDO-1042",
"estatus": "ENTREGADA",
"cliente": {
"nombre": "María López",
"telefono": "+584141234567"
},
"destino": {
"direccion": "Av. Principal, Chacao",
"lat": 10.4967,
"lng": -66.8512
},
"costo_envio_usd": 1.42,
"timestamp": "2026-11-07T15:30:00-04:00"
}
Verificación de firma:
Cada webhook incluye un header X-Signature-256 con la firma HMAC-SHA256 del payload usando tu webhook.secret_hmac.
// Ejemplo en Node.js
const crypto = require('crypto');
const signature = req.headers['x-signature-256'];
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');
if (signature !== expected) {
throw new Error('Firma inválida');
}
Tracking público (comparte con el cliente)
Cada orden creada genera automáticamente un enlace público de rastreo. El cliente final puede abrirlo sin necesidad de cuenta ni login para ver el estado del envío en tiempo real.
El link:
https://rutery.com/rastrear/{token_tracking}
El token_tracking (64 caracteres hexadecimales) se devuelve automáticamente en:
- La respuesta de
POST /orders/create→ campotracking_url - La respuesta de
GET /orders/{id}/status→ campotracking_url - La respuesta de
GET /orders→ campotracking_urlpor cada orden
Qué ve el cliente al abrir el link:
- Mapa interactivo con el destino (rojo) y el rider (verde) en vivo
- Estatus actual del pedido ("En camino a tu dirección", "¡Entregado!", etc.)
- Timeline de progreso visual
- Nombre del rider asignado
- Auto-actualización cada 10 segundos
Qué NO ve el cliente (privacidad):
- Dirección exacta (solo aparece el pin en el mapa)
- Datos del comercio (nombre, teléfono, dirección)
- Precio del envío ni datos de facturación
- Otros pedidos del mismo comercio
Integración con bots (WhatsApp, Telegram, Instagram)
Puedes automatizar el flujo completo de venta y entrega con un bot. No necesitas programar: con Make, Zapier o n8n puedes conectar tu bot (ManyChat, Chatfuel, WhatsApp Cloud API) con la API de Rutery.
Flujo de 5 pasos:
El bot captura los datos
Pide al cliente: nombre, teléfono, dirección de entrega. El bot verifica que la dirección esté dentro de tu zona de cobertura.
El bot cotiza con POST /quote
Envía la dirección a nuestro endpoint de cotización. Devuelve el costo exacto en tiempo real.
POST /api/v1/quote
{ "direccion_destino": "Av. Principal, Chacao" }
→ { "costo_envio_usd": 1.42, "costo_envio_ves": 1272.49 }
El bot suma y muestra el total
Total = Precio del producto + Costo de envío.
Ejemplo: $10.00 producto + $1.42 envío = $11.42 (o el equivalente en Bs. a la tasa del día).
Cliente paga → bot crea la orden
Una vez confirmado el pago (Pago Móvil, transferencia, Zelle), el bot envía el POST a Rutery.
POST /api/v1/orders/create
{
"cliente_final_nombre": "María López",
"cliente_final_telefono": "+584141234567",
"direccion_destino": "Av. Principal, Chacao",
"codigo_externo": "PEDIDO-1042"
}
→ { "orden": { "id": 1042, "tracking_url": "https://rutery.com/rastrear/abc..." } }
Bot envía el link de tracking + notifica cambios
El bot le envía al cliente el tracking_url para que vea el mapa en vivo.
Además, configura un webhook receptor para que Rutery le avise al bot cada cambio de estado, y el bot notifique al cliente.
"Tu pedido ya va en camino. Puedes seguir al repartidor aquí: https://rutery.com/rastrear/abc123"
Casos de uso
Bot de WhatsApp
Tu bot recibe el mensaje del cliente, cotiza con /quote, cobra y crea la orden. Envía el tracking_url para que el cliente rastree.
Bot de Telegram
Igual que WhatsApp: órdenes creadas desde Telegram, notificaciones de estado enviadas al grupo del negocio.
Shopify / WooCommerce
Cuando un cliente compra en tu tienda online, un webhook de Shopify dispara un POST a Rutery. Orden creada sin intervención.
CRM (HubSpot, Pipedrive)
Cada entrega exitosa se registra en el timeline del cliente. Reportes automáticos de entregas por ciudad, vendedor o campaña.
Códigos de error
| HTTP | Código | Significado |
|---|---|---|
| 400 | INVALID_INPUT | Datos mal formados o faltantes |
| 401 | AUTH_REQUIRED | Falta el header Authorization |
| 401 | INVALID_API_KEY | API key incorrecta |
| 403 | COMERCIO_PAUSED | Tu cuenta está pausada temporalmente |
| 404 | ORDER_NOT_FOUND | La orden no existe o no es tuya |
| 409 | DUPLICATE_CODE | El codigo_externo ya existe |
| 422 | GEOCODING_FAILED | No se pudo ubicar la dirección |
| 422 | DESTINO_FUERA_DE_ZONA | La dirección está fuera de la zona de cobertura |
| 422 | CANNOT_CANCEL | La orden no puede cancelarse en su estado actual |
| 429 | RATE_LIMIT_EXCEEDED | Demasiadas peticiones |
| 503 | PRICING_UNAVAILABLE | Servicio temporalmente caído |