> ## Documentation Index
> Fetch the complete documentation index at: https://partner-api.xenda.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart (10 minutos)

> Recorré el ciclo completo contra tu sucursal de sandbox: catálogo, pedido pendiente, aceptar, entregar.

Necesitás la **API key de sandbox** que te entregó Xenda (formato `xnd_...`). En los
ejemplos, reemplazá `$KEY` por tu key.

<Info>
  La sucursal demo ya tiene catálogo cargado y **un pedido pendiente esperándote** —
  tu primer `GET /v1/orders` devuelve un pedido real.
</Info>

## 1. Mirá el pedido pendiente

```bash theme={null}
curl "https://api.automationhub.one/api:07fkGLk_/v1/orders?status=pendiente" \
  -H "X-API-Key: $KEY"
```

Vas a recibir algo así — las `lineas` vienen con **tus códigos** (`codigo`), listas
para matchear contra tu base:

```json theme={null}
{
  "orders": [
    {
      "order_id": 83,
      "status": "pendiente",
      "delivery_type": "delivery",
      "delivery_address": "Av. Cabildo 1234, 3B, CABA",
      "domicilio": {
        "calle": "Av. Cabildo", "numero": "1234", "piso_depto": "3B",
        "localidad": "CABA", "referencia": "tocar timbre 3B"
      },
      "cliente": {
        "nombre": "Maria Demo", "telefono": "+549...",
        "telefono_pais": "54", "telefono_area": "11", "telefono_numero": "40723113"
      },
      "pago": { "modo": "en_entrega", "pagado": false, "monto": 14500 },
      "costo_envio": 0,
      "total": 14500,
      "lineas": [
        {
          "codigo": "1003", "nombre": "1/2 Kilo",
          "cantidad": 1, "precio_unitario": 9500, "subtotal": 9500,
          "opciones": [
            { "codigo": "S05", "nombre": "Frutilla" },
            { "codigo": "S06", "nombre": "Limon" }
          ]
        },
        { "codigo": "3001", "nombre": "Palito bombon", "cantidad": 2, "subtotal": 5000, "opciones": [] }
      ]
    }
  ]
}
```

<Note>
  **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`.
</Note>

## 2. Aceptalo

```bash theme={null}
curl -X POST "https://api.automationhub.one/api:07fkGLk_/v1/orders/83/status" \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{
    "event_id": "mi-evento-001",
    "occurred_at": "2026-07-30T12:00:00-03:00",
    "status": "aceptado"
  }'
```

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

```bash theme={null}
curl -X POST "https://api.automationhub.one/api:07fkGLk_/v1/orders/83/status" \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"event_id": "mi-evento-002", "occurred_at": "2026-07-30T12:20:00-03:00", "status": "listo"}'

curl -X POST "https://api.automationhub.one/api:07fkGLk_/v1/orders/83/status" \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"event_id": "mi-evento-003", "occurred_at": "2026-07-30T12:45:00-03:00", "status": "entregado"}'
```

## 4. Empujá un cambio de precio

```bash theme={null}
curl -X POST "https://api.automationhub.one/api:07fkGLk_/v1/catalog/items" \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{
    "event_id": "mi-evento-004",
    "occurred_at": "2026-07-30T13:00:00-03:00",
    "action": "upsert",
    "items": [
      { "codigo": "1001", "nombre": "Kilo de helado", "categoria": "Helados",
        "precio": 16000, "deshabilitado": false }
    ]
  }'
```

Respuesta: `{"accepted": 1, "rejected": [], "skipped_stale": 0}`. Desde ese momento el
bot cotiza el kilo a \$16.000.

<Info>
  **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.
</Info>

## 5. Probá los reintentos (idempotencia)

Repetí el request anterior **con el mismo `event_id`**:

```bash theme={null}
# misma llamada que el paso 4 → {"duplicate": true, "accepted": 0, ...}
```

Nada se reprocesa. Ante cualquier duda de red, reintentar con el mismo `event_id` es
siempre seguro.

## 6. Auditá tus sincronizaciones

```bash theme={null}
curl "https://api.automationhub.one/api:07fkGLk_/v1/sync-log" -H "X-API-Key: $KEY"
```

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](/pos-estados) y en la referencia de la
API.
