---
title: "List simulation events"
method: GET
path: "/events"
tags: ["events"]
---

# List simulation events

`GET /events`

## Request

- Base URL: `https://api.fallax.io/v1`
- URL: `https://api.fallax.io/v1/events`
- Auth: HTTP bearer

The interaction log: one row each time a simulation was sent, opened, clicked, scanned by a gateway, had credentials submitted to it, or was reported. Each row names the person it belongs to. IP addresses and user agents are stored but never returned.

## Query parameters

- `limit` string: Rows per page, 1 to 200. Defaults to 50. A page comes back with a `nextCursor` when there are more.
- `cursor` string: The `nextCursor` from the previous page. Paging is by cursor rather than by offset, so rows written while you page are never skipped.
- `since` string: Only rows after this instant, exclusive. ISO 8601 or epoch milliseconds. This is the parameter a poll trigger uses: pass the timestamp of the newest row you have already handled.
- `order` 'desc' | 'asc': `desc` (the default) for newest first, which is what a person reading a page wants. `asc` for oldest first, which is what anything resuming from a watermark wants: with `since` and a limit, an ascending page is the oldest rows you have not seen, so a backlog drains in order instead of the newest page hiding the rest.
- `type` string: Comma-separated: `sent`, `opened`, `clicked`, `scanned`, `submitted`, `reported`. Omit for all of them.
- `campaignId` string: Only events from one campaign.

## Response `200`

List simulation events

- EventPage
  - `data` Event[], required
    - `id` string, required
    - `type` string, required
    - `occurredAt` string, date-time, nullable, required
    - `campaign` object, required
      - `id` string, required
      - `name` string, required
    - `person` object, nullable, required
      - `id` string, required
      - `email` string, nullable, required
      - `firstName` string, nullable, required
      - `lastName` string, nullable, required
      - `department` string, nullable, required
  - `nextCursor` string, nullable, required: Pass as `cursor` for the next page.
  - `hasMore` boolean, required

## Other responses

- `400`: A parameter or body field the API cannot use. The message names the field.
- `401`: No key, an unknown key, or one that has been revoked.
- `403`: A read-only key was used on a write endpoint.
- `404`: No such endpoint, or no such row in this workspace. The two are deliberately indistinguishable from outside: another workspace's ids must not be probeable.
- `405`: The path exists but not with that verb. `Allow` lists the verbs that work.
- `429`: More than 120 requests in a minute on one key. `Retry-After` says how long to wait. A poll every minute, and the paging behind it, is nowhere near this.
- `500`: Our fault. Safe to retry.

---

[API](https://skmtc.dev/fallax/apis/fallax-api.md) · [All operations](https://skmtc.dev/fallax/apis/fallax-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fallax/apis/fallax-api/revisions/b5731fd85ef8?raw)
