Poll for state changes across your CRM data. Events provide an ordered log of everything that happens in your org — contact creation, deal stage moves, and more.
See also: Webhooks & Events concepts
| Method | Path | Description |
|---|---|---|
| GET | /events | List events |
GET /events
Returns events in chronological order. Use cursor-based pagination to consume the stream incrementally.
| Parameter | Type | Description |
|---|---|---|
cursor | string | Pagination cursor (resume from last position) |
limit | integer | Results per page (default 50, max 200) |
type | string | Filter by event type (e.g. contact.created) |
curl "$REX_URL/events?limit=10" \
-H "X-Api-Key: $REX_API_KEY"
{
"data": [
{
"id": "evt_01HQ...",
"type": "contact.created",
"occurred_at": "2026-03-16T12:00:00Z",
"data": {
"contact_id": "cont_01HQ...",
"email": "ada@example.com"
}
},
{
"id": "evt_02HQ...",
"type": "deal.stage_changed",
"occurred_at": "2026-03-16T12:05:00Z",
"data": {
"deal_id": "deal_01HQ...",
"from_stage_id": "stg_01HQ...",
"to_stage_id": "stg_02HQ..."
}
}
],
"has_more": true,
"next_cursor": "eyJpZCI6..."
}
Events follow a resource.action naming convention. Common types include:
| Event type | Description |
|---|---|
contact.created | A contact was created |
contact.updated | A contact was updated |
contact.deleted | A contact was deleted |
contact.enriched | A contact was enriched with external data |
company.created | A company was created |
company.updated | A company was updated |
company.deleted | A company was deleted |
company.enriched | A company was enriched with external data |
deal.created | A deal was created |
deal.updated | A deal was updated |
deal.deleted | A deal was deleted |
deal.stage_changed | A deal moved to a new pipeline stage |
deal.won | A deal was marked as won |
deal.lost | A deal was marked as lost |
activity.created | An activity was logged |
activity.updated | An activity was updated |
activity.deleted | An activity was deleted |
trigger.deal.stale | A deal has had no activity beyond the threshold |
import.completed | A CSV/bulk import finished |
To consume events incrementally, store the next_cursor from each response and pass it on the next request:
# First poll
curl "$REX_URL/events?limit=100" -H "X-Api-Key: $REX_API_KEY"
# Subsequent polls (using cursor from previous response)
curl "$REX_URL/events?limit=100&cursor=eyJpZCI6..." -H "X-Api-Key: $REX_API_KEY"
When has_more is false, you are caught up. Poll again after a delay (e.g. 10-30 seconds) to check for new events.
For real-time delivery instead of polling, see the Webhooks API.