# Track event (/api-reference/public-api/trackEvent)

`POST /v1/track`

Base URL: `https://next-api.useplunk.com`

Track an event for a contact. Automatically creates or upserts the contact, then records the event. Tracked events can be used as workflow triggers, segment filters, and audience filters.

**Reserved event names** (rejected with `VALIDATION_ERROR` and code `reserved_event`): anything matching `email.*`, `contact.subscribed`, `contact.unsubscribed`, `segment.<slug>.entry`, `segment.<slug>.exit`. These are emitted by Plunk itself.

**No idempotency**: re-tracking the same event creates a new event record.

## Request body

- `email`: string (email) (required) — Contact email. The contact is auto-created if it doesn't exist.
- `event`: string (required) — Event name. Cannot match the reserved patterns above.
- `subscribed`: boolean — Subscription state to apply to the contact. **New** contacts default to subscribed (`true`). **Existing** contacts keep their current state unless you pass an explicit value here. Pass `false` to track an event without resubscribing an unsubscribed contact.
- `data`: object — Contact data and one-off event variables. Persistent values (primitives, plain objects) are saved on the contact and become available as template variables. Pass `{ value, persistent: false }` for one-shot variables that should not be stored on the contact (e.g. order IDs, transaction details). `null` deletes a field. Empty strings are ignored. Reserved keys are filtered out — see the contacts concept page.

Example:

```json
{
  "email": "user@example.com",
  "event": "string"
}
```

## Responses

### `200` — Event tracked successfully

- `success`: boolean
- `data`: object
  - `contact`: string — Contact ID
  - `event`: string — Event ID
  - `timestamp`: string (date-time)

```json
{
  "success": false,
  "data": {
    "contact": "string",
    "event": "string",
    "timestamp": "2026-05-17T18:27:16.098Z"
  }
}
```

## Example request

```bash
curl -X POST 'https://next-api.useplunk.com/v1/track' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"email":"user@example.com","event":"string"}'
```
