List events for a lead
List interaction events for a lead — messages, calls, emails, tool calls, custom events, compliance blocks, and other types documented in this reference.
Apten may add new type values over time without a version bump or prior notice. Clients should treat unknown types as forward-compatible (skip or store opaquely) unless they filter with the types query parameter.
Incremental sync
Pair this endpoint withGET /leads:
- Poll
GET /leads?updatedSince=…for leads whose profile or activity changed. - When
lastActivityAtmoves forward, callGET /leads/{leadId}/events?since=…for that lead. - Paginate with
nextTokenuntil it isnull.
updatedAt ascending. Use the largest updatedAt from the page as the next since cursor for that lead.
Event types and forward compatibility
Thetype field identifies each event (MESSAGE, CALL, EMAIL, and others documented in the API reference). Apten may add new event types at any time as the product evolves. We do not treat new types as a breaking API change and do not guarantee advance notice before they appear in production responses.
Build integrations to be forward-compatible:
- Prefer an explicit
typesfilter when you only need a fixed set of shapes for your pipeline. - Otherwise, tolerate unknown
typevalues — persist the raw event, skip it, or route it to a generic handler. Do not fail the entire sync or reject the payload becausetypeis unrecognized. - Use
typeplusidas the stable key; do not assume every event is a message, call, or email.
Compliance blocks (COMPLIANCE_BLOCKED)
When external compliance is enabled and an outbound SMS, email, or voice attempt is suppressed, Apten writes a COMPLIANCE_BLOCKED room event. It appears on this endpoint like any other interaction event.
| Expectation | Detail |
|---|---|
| No outbound message/call/email row | A blocked send does not create a MESSAGE, EMAIL, or CALL for that attempt — only COMPLIANCE_BLOCKED. |
| Allowed checks are omitted | Pass results are stored in Apten’s internal audit log only; they are not returned by this API. |
| Filter | ?types=COMPLIANCE_BLOCKED (or include it in a comma-separated list). |
| PII | data includes channel, reason, source, and optional triggeredBy — not phone, email, or full provider payloads. |
id is the stable identifier for the block (same UUID as the internal audit row). data does not repeat it — same pattern as MESSAGE / CALL / EMAIL.
reason is either an Apten system code (e.g. COMPLIANCE_TARGET_MISSING, DNC) or a string returned by your compliance HTTP API when allowed is false. source indicates which check leg blocked (http, apten-dnc, configuration, provider-error, etc.).
Treat COMPLIANCE_BLOCKED in your warehouse as suppressed outreach — not a delivery failure on an existing message.Authorizations
Path Parameters
The lead (room) ID to fetch events for.
Query Parameters
ISO 8601 timestamp. Returns events whose updatedAt is greater than or equal to this value.
Comma-separated list of event types to include. Documented values include MESSAGE, CALL, EMAIL, TOOL_CALL, CUSTOM, and COMPLIANCE_BLOCKED. Use this filter when your integration only handles a known set of types. Defaults to all types currently stored for the lead (including types not listed here). When supplied, a page may return fewer than limit items even if more matching events exist — always paginate using nextToken.
"MESSAGE,COMPLIANCE_BLOCKED"
Maximum number of events to return per page. Defaults to 100, max 1000.
1 <= x <= 1000Opaque cursor from a prior response. Pass it back to fetch the next page. null in the response means you have reached the end; a non-null value means more pages exist (true regardless of how many items the current page returned).
Response
A page of events ordered by updatedAt ascending.
An interaction event between a lead and your organization. The type discriminator determines the shape of data.
New interaction event types may be added in the future. Integrations must accept responses containing undocumented type values or restrict ingestion with the types query parameter on GET /leads/{leadId}/events.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
Cursor for the next page. null if there are no more results.

