Rutery Docs API

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.

Base URL: 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

POST /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):

CampoTipoObligatorioDescripción
direccion_destinostring*Dirección de entrega
lat_destino / lng_destinofloatNoCoordenadas 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
  }
}
POST /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):

CampoTipoObligatorioDescripción
cliente_final_nombrestringSíNombre del destinatario
cliente_final_telefonostringSíTeléfono en formato internacional
direccion_destinostringSíDirección de entrega
lat_destino / lng_destinofloatNoCoordenadas (evita el geocoding)
codigo_externostringNoTu ID interno (evita duplicados)
notasstringNoInstrucciones 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"
  }
}
Nuevo: el campo 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.
GET /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"
GET /orders

Lista las órdenes con filtros opcionales.

Query params:

  • desde — YYYY-MM-DD
  • hasta — YYYY-MM-DD
  • estado — PENDIENTE, ASIGNADA, ENTREGADA, etc. (separar por coma)
  • numero — ID de la orden
  • cliente_nombre — Búsqueda parcial
  • limit / offset — Paginación (max 100)
POST /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"}'
GET /jornadas

Endpoints disponibles:

  • GET /jornadas/activa — Jornada en curso
  • GET /jornadas — Listado con filtros
  • GET /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 creada
  • order.assigned — Rider asignado
  • order.at_pickup — Rider llegó al comercio
  • order.on_way — Rider en camino al cliente
  • order.delivered — Entregado
  • order.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 → campo tracking_url
  • La respuesta de GET /orders/{id}/status → campo tracking_url
  • La respuesta de GET /orders → campo tracking_url por 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
Seguridad: el token es un hash de 32 bytes. Es imposible adivinarlo por fuerza bruta. El comercio decide si comparte el link con el cliente; si no lo hace, nadie más puede ver la orden.

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:

1

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.

2

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 }
3

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).

4

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..." } }
5

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.

Mensaje que el bot le envía al cliente:
"Tu pedido ya va en camino. Puedes seguir al repartidor aquí: https://rutery.com/rastrear/abc123"
Nota: Rutery NO le envía mensajes directamente al cliente final. Los mensajes los controla tu bot. Rutery solo provee la API, el link de tracking y los webhooks para que tú decidas qué notificar y cuándo.

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

HTTPCódigoSignificado
400INVALID_INPUTDatos mal formados o faltantes
401AUTH_REQUIREDFalta el header Authorization
401INVALID_API_KEYAPI key incorrecta
403COMERCIO_PAUSEDTu cuenta está pausada temporalmente
404ORDER_NOT_FOUNDLa orden no existe o no es tuya
409DUPLICATE_CODEEl codigo_externo ya existe
422GEOCODING_FAILEDNo se pudo ubicar la dirección
422DESTINO_FUERA_DE_ZONALa dirección está fuera de la zona de cobertura
422CANNOT_CANCELLa orden no puede cancelarse en su estado actual
429RATE_LIMIT_EXCEEDEDDemasiadas peticiones
503PRICING_UNAVAILABLEServicio temporalmente caído