occurred_after
(midnight UTC on the same day-of-month twelve months ago — not a 365-day
duration).
Raw client IP is never on
/v1 — privacy by design, not a pending
mapping. Device type is a derived class on the event row; raw
user_agent stays private. See
Divergences from the legacy export.Fn_FetchAll query first; this report calls it by name.
Required key scopes
A key granted only
simulation:read cannot call the reporting events
endpoint (the API returns 403). See
choose the right grain.
Source endpoints
Allowlisted filters on the events list (anything else returns
400):
limit, page_token, simulation, entity, event_type,
occurred_after.
This reporting family is a preview dataset.
Inspect the dataset schema and data policies at
GET /v1/reporting/datasets and
GET /v1/reporting/datasets/simulation_events.
Grain
One row per reporting simulation event. A person who opened and then clicked the same message produces two rows. Events with a nullentity_id
(no actor / recipient / target participant) still appear — email is
null.
The API window is widened by one minute; the exact
occurred_at >= WindowStart bound is re-applied locally so the trailing
year does not depend on whether the server treats occurred_after as
inclusive or exclusive.
Request budget: one paginated walk of events in the window, plus one walk
of entities. Always set limit = "500".
Column mapping
Legacy column names are from your previous provider’s export./v1 fields
are the public API names; the query aliases some of them for the report.
Action tokens
action is the closed reporting token. Legacy “Email Sent” maps to
simulation.delivered (delivered is the public verb; the wire token is
simulation.delivered).
Extra fields kept because the API has them:
sender_domain, full_name,
event_id, entity_id, simulation_id, occurred_at, plus
entity_type and entity_status from the entity join.
Divergences from the legacy export
- Raw IP is never available.
/v1will not expose raw client IP — privacy by design, not a pending mapping. The query does not add a placeholder IP column. - Device type is derived, not raw.
device_typeis a derived device class for click, submit, and report events. Observed tokens includedesktop,mobile,tablet, andunknown, but the emitter stores a free-form string — treat it as open text, not a closed enum. It is null when the event has no derived class, and the rawuser_agentstring stays private. - “Email Sent” is
simulation.delivered. Use that token when you filter or count sends. Do not look for a legacyemail_sentstring. - Recipient email is a join, not a field on the event. The reporting
event omits email; the query walks
/entitiesto fill it. - Trailing 12 calendar months, not a 365-day duration, and not the full history.
- Long-form, not collapsed. One row per interaction, not one result per person.
Next steps
Power BI and Excel setup
Credentials, pagination, and loading these queries in Power BI or Excel.
Most susceptible users
Per-person 12-month click, credential, and report rollup.
Per-person compliance
Training enrollments at person × assignment grain.
API keys
Grant
reporting:read and entity:read on the key that refreshes this report.
