DerLabs / developersAutomatización para restaurantes
API v1

Conecta cualquier sistema con DerLabs

Envía pedidos y clientes desde tu web, tu app, Zapier o Make, y recibe un aviso firmado cada vez que entra un pedido o un cliente nuevo. Lo que llega por la API pasa por la misma automatización: aviso al equipo, tablet de cocina y ficha del cliente.

Autenticación

El dueño del negocio crea la clave en la Oficina, en Integraciones. La clave se muestra una sola vez; DerLabs guarda solo una huella cifrada, así que si la pierdes, crea otra y revoca la anterior.

Authorization: Bearer dlk_live_…
Content-Type: application/json

URL base: https://derlabs.cl/api/v1. Úsala solo desde tu servidor: la clave nunca debe ir en una página web ni en una app instalada.

GET/me

Comprueba la clave y devuelve el negocio al que pertenece.

Pedidos

POST/pedidos

Crea un pedido. El total se calcula en DerLabs a partir de los items. Envía externalId (tu id) o el encabezado Idempotency-Key para que un reintento nunca duplique el pedido.

curl -X POST https://derlabs.cl/api/v1/pedidos \
  -H "Authorization: Bearer $DERLABS_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-10482" \
  -d '{
    "externalId": "10482",
    "origen": "Mi web",
    "tipo": "delivery",
    "pagado": true,
    "cliente": { "nombre": "Camila Rojas", "telefono": "+56912345678",
                 "direccion": "Av. Italia 1234", "comuna": "Providencia" },
    "items": [ { "nombre": "Torta tres leches 20 personas", "cantidad": 1, "precio": 38000 } ],
    "costoDelivery": 4000,
    "fechaEntrega": "2026-12-05",
    "notas": "Escribir Feliz cumpleaños Sofía"
  }'
CampoDetalle
cliente.nombreObligatorio. Hasta 80 caracteres.
cliente.telefonoRecomendado. Con él se arma la ficha del cliente.
tiporetiro (por defecto), delivery (exige dirección) o local.
itemsEntre 1 y 100. Cada uno con nombre, cantidad (1-999), precio en pesos y nota opcional.
pagadotrue si ya se cobró en tu sistema. Si no, queda como pago contra entrega.
fechaEntregaOpcional, formato AAAA-MM-DD.
GET/pedidos?dias=7&limite=50

Lista los pedidos recientes (máximo 90 días y 100 resultados).

GET/pedidos/{id}
PATCH/pedidos/{id}

Cambia el estado: preparacion, camino, listo o cancelado.

{ "estado": "listo" }

Clientes

POST/clientes

Crea o actualiza un cliente por su teléfono. Sirve para traer tu base de clientes y usarla en campañas y saludos de cumpleaños.

{ "telefono": "+56912345678", "nombre": "Camila Rojas", "email": "camila@correo.cl",
  "cumpleanos": "08-21", "notas": "Prefiere sin lactosa", "optOut": false }
GET/clientes?limite=100

Devuelve clientes con sus compras y total gastado.

Webhooks

DerLabs envía un POST JSON a tu URL cuando ocurre un evento. Configúralos en la Oficina o con la API (máximo 5 por negocio, solo https público).

EventoCuándo
pedido.creadoEntra un pedido por cualquier canal (web, WhatsApp, Instagram, API).
pedido.confirmadoEl cliente confirmó por WhatsApp un pedido en efectivo.
pedido.estadoSe cambió el estado vía API.
cliente.nuevoPrimera compra o alta de un cliente.
cotizacion.enviadaSe envió una propuesta de evento al cliente.
GET/webhooks
POST/webhooks
{ "url": "https://tu-sistema.cl/derlabs", "eventos": ["pedido.creado", "cliente.nuevo"] }

La respuesta incluye el secreto del webhook, que se muestra una sola vez.

DELETE/webhooks/{id}

Verificar la firma

Cada aviso trae X-DerLabs-Signature: t=<unix>,v1=<hex>, donde v1 es HMAC-SHA256 del secreto sobre t + "." + cuerpo. Rechaza avisos con más de 5 minutos de antigüedad y usa X-DerLabs-Delivery para no procesar dos veces el mismo.

import crypto from "node:crypto";

function avisoValido(cuerpo, firma, secreto) {
  const { t, v1 } = Object.fromEntries(firma.split(",").map(p => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const esperado = crypto.createHmac("sha256", secreto).update(t + "." + cuerpo).digest("hex");
  return v1.length === esperado.length &&
         crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(esperado));
}

Responde con un código 2xx en menos de 8 segundos. Si falla, reintentamos a los 1, 5, 15, 60, 180 y 600 minutos; tras 25 fallas seguidas el webhook se pausa.

Errores y límites

Los errores responden { "ok": false, "error": { "codigo", "mensaje" } }.

CódigoSignificado
401Falta la clave, es inválida o fue revocada.
403La API está desactivada para el negocio.
404Ruta o recurso inexistente.
413 / 415Cuerpo mayor a 64 KB, o sin Content-Type: application/json.
422Un campo no es válido; codigo indica cuál.
429Más de 120 llamadas por minuto con la misma clave. Respeta Retry-After.
¿Necesitas conectar un sistema que no está aquí? Escríbenos desde derlabs.cl y lo vemos contigo.