Desarrolladores
Conecta BeeRoutes con todo lo que usas
Una API REST sencilla con acceso de lectura y escritura, webhooks firmados para cada actualización de entrega y conexiones listas para usar con Shopify y Zapier.
API REST
Crea pedidos y clientes, consulta productos, stock y estado de las entregas: JSON sobre HTTPS.
Webhooks
Recibe un POST firmado en cuanto un pedido se confirma, sale en camino, se entrega o falla.
Shopify
Los nuevos pedidos de Shopify se convierten en entregas automáticamente; las cancelaciones también se sincronizan.
Zapier
Conecta BeeRoutes con Google Sheets, Slack, tu contabilidad y más de 7000 apps, sin código.
Autenticación
Crea una clave de API en BeeRoutes, en Integraciones → Claves de API (solo cuentas de oficina). Envíala en la cabecera Authorization de cada solicitud. Las claves pertenecen a tu empresa: solo ven tus propios datos.
curl https://app.beeroutes.com/api/v1/orders?status=delivered \
-H "Authorization: Bearer br_live_…"Límite: 300 solicitudes por minuto por clave. Las listas devuelven hasta 200 elementos (limit, offset).
Endpoints
https://app.beeroutes.com/api/v1
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /meComprueba la clave: devuelve tu empresa | Comprueba la clave: devuelve tu empresa |
| GET | /productsLista productos (filtros: sku, q, active) | Lista productos (filtros: sku, q, active) |
| GET | /products/{id}Un producto con precio, IVA y stock | Un producto con precio, IVA y stock |
| GET | /customersLista clientes (filtros: email, q, active) | Lista clientes (filtros: email, q, active) |
| POST | /customersCrea un cliente; sin lat/lng, la dirección se localiza en el mapa | Crea un cliente; sin lat/lng, la dirección se localiza en el mapa |
| GET | /customers/{id}Un cliente | Un cliente |
| PATCH | /customers/{id}Modifica un cliente (solo los campos que envíes) | Modifica un cliente (solo los campos que envíes) |
| GET | /ordersLista pedidos (filtros: status, date, from, to, customer_id, external_ref) | Lista pedidos (filtros: status, date, from, to, customer_id, external_ref) |
| POST | /ordersCrea un pedido: productos por product_id o sku, cliente por id, email o datos | Crea un pedido: productos por product_id o sku, cliente por id, email o datos |
| GET | /orders/{id}Un pedido con artículos, conductor, hora estimada y prueba de entrega | Un pedido con artículos, conductor, hora estimada y prueba de entrega |
| POST | /orders/{id}/confirmConfirma un pedido pendiente (emite la factura) | Confirma un pedido pendiente (emite la factura) |
| POST | /orders/{id}/cancelCancela un pedido antes de que salga (el stock se repone) | Cancela un pedido antes de que salga (el stock se repone) |
| GET | /webhooksLista webhooks | Lista webhooks |
| POST | /webhooksSuscribe una URL a eventos (devuelve el secreto de firma una sola vez) | Suscribe una URL a eventos (devuelve el secreto de firma una sola vez) |
| DELETE | /webhooks/{id}Cancela la suscripción | Cancela la suscripción |
Crear un pedido
Envía external_ref con tu propio id de pedido: si envías el mismo pedido dos veces, se devuelve el existente en lugar de un duplicado. Añade "confirm": true para confirmarlo directamente.
curl -X POST https://app.beeroutes.com/api/v1/orders \
-H "Authorization: Bearer br_live_…" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "PO-10442",
"customer_email": "orders@cafe-central.com",
"delivery_date": "2026-11-03",
"slot_from": "08:00",
"slot_to": "11:00",
"items": [
{ "sku": "WAT-05", "quantity": 20 },
{ "sku": "JUI-01", "quantity": 6 }
]
}'Webhooks
BeeRoutes envía por POST un evento JSON a tu URL cuando un pedido se crea, se confirma, se asigna, sale en camino, se entrega, falla o se cancela. Añade webhooks en Integraciones o mediante la API.
Eventos
order.createdorder.confirmedorder.assignedorder.in_transitorder.deliveredorder.failedorder.cancelled{
"id": "evt_5f2c…",
"event": "order.delivered",
"created_at": "2026-11-03T09:42:10.000Z",
"data": {
"id": 1842,
"number": "ORD-2026-01842",
"external_ref": "PO-10442",
"status": "delivered",
"delivery_date": "2026-11-03",
"customer": { "id": 77, "business_name": "Café Central", … },
"items": [ { "sku": "WAT-05", "quantity": 20, "delivered_qty": 20, … } ],
"total": 182.4,
"proof": { "receiver_name": "Maria", "has_signature": true, "has_photo": false },
"delivered_at": "2026-11-03T09:42:08.000Z"
}
}Verificar la firma
Cada solicitud lleva una cabecera BeeRoutes-Signature: t (tiempo unix) y v1, el HMAC-SHA256 de «t.body» con el secreto de tu webhook. Responde con cualquier 2xx en menos de 10 segundos; las entregas fallidas se reintentan una vez y un webhook se desactiva tras 25 fallos seguidos. Responde 410 para cancelar la suscripción.
import crypto from "node:crypto";
// header: "t=1762162930,v1=5d41…"
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Errores
Los errores usan códigos de estado HTTP y un cuerpo JSON con un código y un mensaje:
{ "error": { "code": "product_not_found", "message": "Unknown or inactive products: sku JUI-09" } }401 clave ausente o no válida · 404 no encontrado · 409 no permitido en el estado del pedido · 422 campos no válidos, SKU desconocido o dirección no encontrada · 429 demasiadas solicitudes
Shopify
No hay que instalar ninguna app. En BeeRoutes abre Integraciones → Shopify, copia tu URL privada de webhook en Shopify (Configuración → Notificaciones → Webhooks, «Creación de pedido» y «Cancelación de pedido») y pega de vuelta el secreto de firma de Shopify. Los productos se emparejan por SKU; los clientes nuevos se crean a partir de la dirección de envío.
Zapier
Usa «Webhooks by Zapier»: Catch Hook como webhook de BeeRoutes para iniciar Zaps cuando cambian los pedidos, y POST a la API con tu clave para crear pedidos o clientes desde cualquier app.
Abrir Integraciones →Planifica hoy las rutas de mañana
Empieza tu prueba gratuita de 14 días y planifica tu primer día en una tarde.