List events
GET/v1/events
Requires an API key with the events:read scope. About keys and scopes
Works with integration, agent and partner keys.
Every event the workspace tracked, accepted or rejected, newest first: did an integration's event arrive, and if not, why? Accepted events are ordered and filtered by when they happened, rejected ones by when they arrived; the log reaches back meta.retention. A rejected event is a tracked event the API refused (validation, an unknown contact, the name limit, a deleted name), kept as sent with the error it answered; a batch refused whole is listed event by event. A request refused before its body was read (credentials, rate limit, plan, size, broken JSON) is not kept. query matches an event name exactly, or a contact's id, email address or external id (accepted events only: a rejected one has no contact); property values are not searched. Complete, not sampled. For a member, a property whose key is a masked attribute is left out, as on contact reads.
Query parameters
limitintegeroptionalHow many items a page holds: 1 to 100, 20 by default.
min > 0 · max 100 · default
20cursorstringoptionalWhere the page starts: the previous page's
meta.pagination.nextCursor. Omit it for the first page, and send the same filters with it.1–2,048 characters
namestringoptionalOnly events of this name.
1–128 characters
statusstringoptionalOnly
acceptedevents, or onlyrejectedones (refused, kept with the error).one of
accepted,rejectedsourcestringoptionalOnly events that came in this way. Nothing indexes it, so a page polling for new events also sets
occurredAfter.one of
api,web,system,stripe,zapier,make,n8n,segmentquerystringoptionalAn event name, exactly as tracked, or a contact's id, email address or external id. Property values are not searched.
1–320 characters
occurredAfterstringoptionalOnly events that happened at or after this time (inclusive), a rejected one by when it arrived; the log reaches back
meta.retentionat most.date-time
occurredBeforestringoptionalOnly events that happened before this time (exclusive).
date-time
Header parameters
Kirora-WorkspacestringoptionalPartner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.
pattern
^[A-Za-z0-9._:-]{1,128}$
Returns
Returns 200 OK with a list of Event objects in data, and the next page's cursor in meta (see pagination). Otherwise returns an error; Errors lists every code and which to retry.
One of 2 shapes:
- Accepted
10 child attributes
idstringrequireduuid
sourcestringrequiredThe path it came in on, set by Kirora:
api(an API key),web(the Kirora web SDK),system(recorded by Kirora) or the integration that sent it. A key made for an app labels its events with that app, whoever uses the key.one of
api,web,system,stripe,zapier,make,n8n,segmentreceivedAtstringrequiredWhen Kirora received it.
date-time
status"accepted"requirednamestringrequiredcontactobjectrequired3 child attributes
idstringrequireduuid
externalIdstring | nullrequiredemailstring | nullrequired
propertiesmap<string, any>requiredAs tracked, less any key masked from this viewer.
contextobject | nullrequired9 child attributes
sessionIdstringoptionalThe visit, from the SDK.
up to 128 characters
localestringoptionalAs BCP 47,
en-GB.up to 35 characters
timezonestringoptionalAs IANA,
Europe/Berlin.up to 64 characters
pageobjectoptionalWeb: the page as visited: query strings kept, fragments removed. A longer value is cut, not refused:
url,searchandreferrerat 8192 characters,pathat 2048,titleat 256.5 child attributes
urlstringoptionalThe canonical URL if the page has one, with the page's query string added unless it has its own; else the page's address.
pathstringoptionalsearchstringoptionalThe visited address's query string,
?plan=pro; empty or absent when it has none.titlestringoptionalreferrerstringoptional
campaignobjectoptionalWeb: the
utm_*parameters of the page, each cut to 256 characters.5 child attributes
sourcestringoptionalmediumstringoptionalnamestringoptionaltermstringoptionalcontentstringoptional
deviceobjectoptional1 child attribute
idstringoptionalA random id the SDK keeps on the device; never a hardware id.
up to 128 characters
libraryobjectoptional2 child attributes
namestringoptionalup to 64 characters
versionstringoptionalup to 64 characters
ipstringoptionalup to 64 characters
userAgentstringoptionalup to 1,024 characters
occurredAtstringrequiredWhen it happened.
date-time
expiresAtstringrequiredWhen retention deletes it: when it happened plus the days the plan kept events when it was stored. Fixed: a plan change moves only later events.
date-time
- Rejected
8 child attributes
idstringrequireduuid
sourcestringrequiredThe path it came in on, set by Kirora:
api(an API key),web(the Kirora web SDK),system(recorded by Kirora) or the integration that sent it. A key made for an app labels its events with that app, whoever uses the key.one of
api,web,system,stripe,zapier,make,n8n,segmentreceivedAtstringrequiredWhen Kirora received it.
date-time
status"rejected"requirednamestring | nullrequiredNull when the request had no valid name.
occurredAtstring | nullrequiredWhen it happened; null when the request gave no valid time.
date-time
payloadobjectrequiredThe event as sent, less masked property keys; null when it was over 32 KB.
errorobjectrequiredThe error the API answered.
5 child attributes
codestringrequiredone of
BAD_REQUEST,ALREADY_EXISTS,CONFLICT,IN_USE,FORBIDDEN,SCOPE_MISSING,AGENT_KEY_REFUSED,INTERNAL_ERROR,NOT_FOUND,METHOD_NOT_ALLOWED,PAYLOAD_TOO_LARGE,UNSUPPORTED_MEDIA_TYPE,RATE_LIMITED,REVISION_CONFLICT,SERVICE_UNAVAILABLE,UNAUTHORIZED,VALIDATION_ERROR,API_KEY_IP_NOT_ALLOWED,AGENT_CONFIRMATION_REQUIRED,EMBED_BUILDER_UNAVAILABLE,EMBED_ORIGIN_NOT_ALLOWED,WORKSPACE_SUSPENDED,WORKSPACE_DELETION_PENDING,CONTACT_SEND_IN_PROGRESS,EXPORT_UNAVAILABLE,NOTHING_TO_EXPORT,EVENT_NAME_LIMIT_REACHED,PLAN_LIMIT_REACHED,SENDING_REVIEW_REQUIRED,PLAN_FEATURE_UNAVAILABLE,CAMPAIGN_AUDIENCE_CONFLICT,EMPTY_AUDIENCE,DRAFT_INCOMPLETE,INVALID_SCHEDULE,UNSUPPORTED_CHANNEL,POSTAL_ADDRESS_MISSING,CONSENT_MISSING,SUPPRESSED,TOPIC_UNSUBSCRIBED,SIGNUP_BLOCKED,INVALID_SENDER_ADDRESS,SENDING_DOMAIN_DMARC_MISSING,SENDING_DOMAIN_IDENTITY_CONFLICT,TEST_SEND_OUTCOME_UNKNOWN,TEST_SEND_ROUTE_NOT_READY,TEST_SEND_UNAVAILABLE,SENDING_DOMAIN_UNVERIFIED,IDEMPOTENCY_KEY_REUSED,IDEMPOTENCY_KEY_IN_USE,IDEMPOTENCY_KEY_OUTCOME_UNKNOWN,CONTENT_NOT_RETAINED,RECIPIENT_EMAIL_MISSING,RECIPIENT_EMAIL_UNSUPPORTED,TEMPLATE_NOT_PUBLISHED,TEMPLATE_ENVELOPE_INCOMPLETE,PUSH_APP_NOT_READY,PUSH_DESTINATION_MISSING,FORM_CLOSEDmessagestringrequirederrorsFieldError[]optionalEach field the request got wrong: on
VALIDATION_ERRORandDRAFT_INCOMPLETE.6 child attributes
instringoptionalThe part of the request the field is in, when known.
one of
body,query,params,headersfieldstringrequiredDotted path to the field (
blocks.0.text); empty for the whole part.codestringoptionalThe rule that failed (
too_big,invalid_type,custom, …).messagestringrequiredPlain words, meant to be shown beside the field.
minimumnumberoptionalThe bound a
too_smallrule set.maximumnumberoptionalThe bound a
too_bigrule set.
detailsobjectoptionalWhat else the error carries, by
code: see that code's description.requestIdstringoptional