Skip to main content
Necesitás la API key de sandbox que te entregó Xenda (formato xnd_...). En los ejemplos, reemplazá $KEY por tu key.
La sucursal demo ya tiene catálogo cargado y un pedido pendiente esperándote — tu primer GET /v1/orders devuelve un pedido real.

1. Mirá el pedido pendiente

Vas a recibir algo así — las lineas vienen con tus códigos (codigo), listas para matchear contra tu base:
Qué puede venir en null — tratá estos campos como opcionales y poné tu propio valor por defecto:
  • delivery_address y todo el objeto domicilio (calle, numero, piso_depto, localidad, referencia): en retiro por el local (delivery_type: "pick_up") vienen todos en null; en envíos, piso_depto y referencia son opcionales, y si el domicilio no pudo separarse los campos vienen null con el texto completo en delivery_address.
  • cliente.nombre: si el cliente no dio su nombre — mostrá “Cliente”.
  • cliente.telefono_pais / telefono_area / telefono_numero: null solo en pedidos anteriores a julio 2026; los nuevos vienen siempre poblados.
  • lineas[].codigo y opciones[].codigo: null si el producto o sabor se cargó a mano en Xenda (sin código tuyo). Con el catálogo sincronizado desde tu POS, siempre vienen.
Todo lo demás viene siempre con valor: pago.modo default "en_entrega", pago.pagado default false, pago.monto y costo_envio default 0.

2. Aceptalo

Respuesta: {"order_id": 83, "status": "en_preparacion"} — aceptar mueve el pedido directo a en preparación (y en producción dispara la notificación de WhatsApp al cliente).

3. Marcalo listo y entregado

4. Empujá un cambio de precio

Respuesta: {"accepted": 1, "rejected": [], "skipped_stale": 0}. Desde ese momento el bot cotiza el kilo a $16.000.
Alta y modificación son el mismo request: es un upsert por codigo. Si el codigo no existe lo creamos, si existe lo actualizamos — la distinción la hacemos nosotros. Mandá siempre el objeto completo del producto.

5. Probá los reintentos (idempotencia)

Repetí el request anterior con el mismo event_id:
Nada se reprocesa. Ante cualquier duda de red, reintentar con el mismo event_id es siempre seguro.

6. Auditá tus sincronizaciones

Cada corrida de catálogo y cada cambio de estado que hiciste queda registrado, con los ítems rechazados y el motivo si algo falló.
Eso es todo el ciclo. Los detalles finos (estados, transiciones válidas, reglas de sincronización) están en Estados del pedido y en la referencia de la API.