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

# track()

> Envía un evento de negocio y evalúa reglas de campaña

`track()` registra un evento de negocio y evalúa si alguna regla de campaña debe activar una mecánica.

## Uso

<CodeGroup>
  ```typescript TypeScript theme={null}
  const result = await nippy.track({
    userId: 'user-123',
    campaignId: 'camp-abc',
    eventType: 'card.purchase.completed',
    properties: { value: 500 },
    occurredAt: new Date().toISOString()
  })
  ```

  ```bash curl theme={null}
  curl -X POST https://ms.nippy.la/v1/public/events/track \
    -H "x-api-key: npk_live_xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "userId": "user-123",
      "campaignId": "camp-abc",
      "eventType": "card.purchase.completed",
      "properties": { "value": 500 },
      "occurredAt": "2026-05-01T12:00:00.000Z"
    }'
  ```
</CodeGroup>

## Parámetros

<ParamField body="userId" type="string" required>
  Identificador del usuario en tu sistema. Ejemplo: `user-123`.
</ParamField>

<ParamField body="campaignId" type="string" required>
  ID de la campaña que debe evaluar el evento. Ejemplo: `camp-abc`.
</ParamField>

<ParamField body="eventType" type="string" required>
  Tipo de evento configurado en la regla. Ejemplo: `card.purchase.completed`.
</ParamField>

<ParamField body="properties" type="object" default="{}">
  Datos del evento que se evalúan en condiciones de reglas. Ejemplo: `{ "value": 500 }`.
</ParamField>

<ParamField body="occurredAt" type="string" default="hora de recepción">
  Timestamp ISO 8601 de cuándo ocurrió el evento. Ejemplo: `2026-05-01T12:00:00.000Z`.
</ParamField>

## Respuesta

<ResponseField name="triggered" type="array">
  Lista de mecánicas activadas por el evento. Si está vacía, ninguna regla aplicó.
</ResponseField>

<ResponseField name="triggered[].spinId" type="string">
  ID del spin disparado.
</ResponseField>

<ResponseField name="triggered[].campaignId" type="string">
  ID de la campaña que activó el spin.
</ResponseField>

<ResponseField name="triggered[].ruleId" type="string">
  ID de la regla que activó el spin.
</ResponseField>

<Note>
  `track()` no retorna el resultado del spin. El resultado llega por webhook `spin.completed`.
</Note>
