APIActualizado: Junio 2026

API — Pedidos

Crea pedidos de comida, tienda o productos desde sistemas externos (tu sitio web, app móvil o POS).

Endpoints

POST/api/v1/pedidos

Crea un nuevo pedido. El agente notifica al cliente por WhatsApp de forma automática si se incluye el teléfono.

GET/api/v1/pedidos

Lista pedidos con filtros opcionales por estado, tipo y rango de fecha.

GET/api/v1/pedidos/:id

Obtiene detalles de un pedido específico incluyendo todos los ítems y el historial de estados.

PATCH/api/v1/pedidos/:id/estado

Actualiza el estado de un pedido (ej: marcar como preparando, listo, en camino, entregado).

Request body — POST /api/v1/pedidos

typescript
interface CrearPedidoRequest {
  tipo: 'DOMICILIO' | 'RECOGER' | 'MESA'  // Tipo de pedido (requerido)
  nombreCliente: string                     // Nombre del cliente (requerido)
  telefono?: string                         // Para notificación WhatsApp
  items: Array<{
    productoId: string                      // ID del producto/platillo del catálogo
    cantidad: number                        // Cantidad (mínimo 1)
    notas?: string                          // Ej: "sin cebolla", "término 3/4"
  }>
  // Solo para DOMICILIO:
  direccionEntrega?: {
    calle: string
    colonia?: string
    referencias?: string
  }
  // Solo para MESA:
  numeroMesa?: number
  // Opcional:
  notas?: string                            // Instrucciones generales del pedido
  programadoPara?: string                   // ISO 8601 si el pedido es para después
}
Info
Los precios se toman del catálogo al momento de crear el pedido. Si un precio cambió desde que el cliente vio el menú, se aplica el precio actual. El total se calcula automáticamente.

Response

201 Created:

json
{
  "id": "ped_x1y2z3w4",
  "negocioId": "neg_xyz",
  "tipo": "DOMICILIO",
  "estado": "RECIBIDO",
  "cliente": {
    "nombre": "Carlos López",
    "telefono": "+525598765432"
  },
  "items": [
    {
      "productoId": "prd_abc",
      "nombre": "Pizza Margarita",
      "cantidad": 1,
      "precioUnitario": "180.00",
      "notas": null
    },
    {
      "productoId": "prd_def",
      "nombre": "Refresco 600ml",
      "cantidad": 2,
      "precioUnitario": "35.00",
      "notas": null
    }
  ],
  "subtotal": "250.00",
  "envio": "50.00",
  "total": "300.00",
  "direccionEntrega": {
    "calle": "Av. Insurgentes 1234",
    "colonia": "Del Valle",
    "referencias": "Edificio azul, departamento 3B"
  },
  "creadoEn": "2026-06-25T19:00:00Z"
}

Ciclo de estados

EstadoDescripciónQuién lo cambia
RECIBIDOPedido recibido, pendiente de confirmarAutomático al crear
CONFIRMADONegocio aceptó el pedidoAPI o panel
PREPARANDOEn preparación en cocina/almacénAPI o panel
LISTOListo para recoger o enviarAPI o panel
EN_CAMINORepartidor en camino (solo domicilio)API o panel
ENTREGADOPedido completadoAPI o panel
CANCELADOPedido canceladoAPI, panel o cliente via agente

Cada cambio de estado notifica automáticamente al cliente por WhatsApp si tiene teléfono registrado.

Errores específicos de pedidos

CódigoHTTPDescripción
PRODUCTO_NOT_FOUND404Un productoId no existe en el catálogo
PRODUCTO_AGOTADO422Un producto tiene inventario en 0
PRODUCTO_INACTIVO422Un producto está marcado como no disponible
TIPO_NO_SOPORTADO422El tipo de pedido no está habilitado para este negocio
DIRECCION_REQUERIDA422Pedido a domicilio sin dirección de entrega

Ejemplos

Crear pedido a domicilio

javascript
const pedido = await fetch('https://app.xambee.com/api/v1/pedidos', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer xam_tu_api_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    tipo: 'DOMICILIO',
    nombreCliente: 'Ana Martínez',
    telefono: '+525512345678',
    items: [
      { productoId: 'prd_pizza_margarita', cantidad: 1, notas: 'extra queso' },
      { productoId: 'prd_refresco_grande', cantidad: 2 }
    ],
    direccionEntrega: {
      calle: 'Calle Reforma 456',
      colonia: 'Centro',
      referencias: 'Casa azul con portón negro'
    }
  })
}).then(r => r.json())

Actualizar estado a "En camino"

bash
curl -X PATCH "https://app.xambee.com/api/v1/pedidos/ped_x1y2z3w4/estado" \
  -H "Authorization: Bearer xam_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{"estado": "EN_CAMINO"}'