> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pos.terominds.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pull de eventos

> Leé el feed de eventos del POS por cursor de seq para replay y reconciliación, sin webhooks.

## Qué es

Además de los [webhooks](https://docs.pos.terominds.com/api/webhooks.md), Tero POS expone un feed de eventos por pull. Sirve para reconciliar, reprocesar o cargar eventos perdidos. El mismo envelope y el mismo catálogo de eventos.

## Dónde está

```
GET /api/integration/v1/events?after=<seq>&limit=<1..500>
```

Acepta una clave de alcance **lectura** o **escritura**.

```bash theme={null}
export TERO_API='https://pos-api.terominds.com/api'
export TERO_API_KEY='tero_live_aabbccdd_xxxxxxxx'
export TERO_TENANT_ID='00000000-0000-0000-0000-000000000001'

curl -sS "$TERO_API/integration/v1/events?after=0&limit=100&tenantId=$TERO_TENANT_ID" \
  -H "Authorization: Bearer $TERO_API_KEY"
```

## Parámetros

| Parámetro | Por defecto | Qué hace |
| - | - | - |
| `after` | `0` | Devuelve eventos con `seq` **mayor** que este valor. |
| `limit` | `100` | Máximo de eventos (1 a 500). |
| `tenantId` | — | Solo para sesiones de navegador con más de una empresa. Con una API key se infiere. |

## Respuesta

```json theme={null}
{
  "ok": true,
  "events": [
    {
      "event_id": "9d1b2c3d-0000-4000-8000-000000000000",
      "seq": 18234,
      "tenant_id": "00000000-0000-0000-0000-000000000001",
      "type": "sale.created",
      "occurred_at": "2026-10-21T19:00:00.000Z",
      "source": { "pos_id": "aaaa…", "location_id": "bbbb…" },
      "data": { "sale_id": "cccc…", "total_pesos": 10800 }
    }
  ],
  "next_seq": 18234
}
```

`next_seq` es el `seq` del último evento de la página. Guardalo y volvé a llamar con `after=<next_seq>`. Si la página viene vacía, `next_seq` es igual al `after` que enviaste.

## Cómo paginar

1. Guardá tu cursor (`next_seq`) por empresa.
2. Llamá con `after=<cursor>` y `limit=500`.
3. Procesá los eventos **en orden de `seq`** y avanzá el cursor.
4. Repetí hasta que la página venga vacía.

> [!NOTE]
>
> Los eventos se conservan **90 días**. Después de eso se eliminan del feed (y con ellos las entregas pendientes). Si tu ERP estuvo caído más de ese plazo, resincronizá desde los endpoints de reporte del back office.

## Reglas de procesamiento

* **Idempotencia por `event_id`**: un evento puede repetirse (reintento de webhook o replay manual). Deduplicá por `event_id`.
* **Orden por `seq`**: dentro de una empresa los `seq` son crecientes y sin repetir. El feed tolera huecos, no los rellena.
* **Duplicados y huecos**: al reprocesar, no asumas que el `seq` anterior es exactamente `seq - 1`.
* **Sin eventos de nota de crédito aparte**: las NC llegan como `fiscal_document.issued` con `data.kind = "credit_note"`.

## Errores

| Código | `error` | Qué significa |
| - | - | - |
| 400 | `tenant_required` | Sesión con varias empresas sin `tenantId`. |
| 401 | `unauthorized` | Falta autenticación. |
| 403 | `forbidden` | La clave no corresponde a la empresa pedida. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.