List outbound messages
GET/v1/messages
Requires an API key with the messages:read scope. About keys and scopes
Works with integration, agent and partner keys.
Lists the workspace message log: one row per outbound message from campaigns, journeys and transactional sends, newest first, whether it was sent, is still queued, or was skipped or failed. campaign and journey say where a row came from (neither, for a transactional send), and bounce, failure or skip what became of it.
Filters. recipient matches the address a message was sent to, and also email messages not yet given one (queued, or skipped before sending) whose contact's current email is that address. Messages past the retention period name no one and match no recipient. query is a search: part of the recipient's address or name, matched against the contact each message went to. campaignId and journeyId narrow to one source, and stepId with journeyId to one step of the journey, in every version of its steps. templateId and correlationId narrow to transactional sends, from one stored template or carrying your own reference. opened and clicked split by engagement. createdAfter is inclusive and createdBefore exclusive. No total is returned.
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
statusstringoptionalOnly messages in this status.
one of
queued,sending,skipped,sent,failed,delivered,bounced,complainedchannelstringoptionalOnly messages on this channel.
one of
email,pushrecipientstringoptionalThe exact address the message went to.
querystringoptionalPart of the recipient's email address or name, matched against the contact the message went to.
1–100 characters
messageTypestringoptionalOnly messages of this type:
marketingortransactional.one of
marketing,transactionalcampaignIdstringoptionalOnly messages from this campaign.
uuid
journeyIdstringoptionalOnly messages from this journey.
uuid
stepIdstringoptionalWith
journeyId, only messages from the journey's step with this id, in every version of its steps.pattern
^[a-z0-9][a-z0-9_-]{0,63}$templateIdstringoptionalOnly transactional sends from this stored template; no other message records one.
uuid
correlationIdstringoptionalOnly the transactional sends that carried this
correlationId.1–255 characters
sentstringoptionaltrue: handed to the provider, whatever happened after;false: never sent (queued, failed before sending or skipped).one of
true,falsedeliveredstringoptionaltrue: delivery was confirmed, even if a complaint or bounce came later;false: never confirmed.one of
true,falsebouncedstringoptionaltrue: a hard bounce was recorded, even if a complaint came later;false: none. A test send's acted-out bounce is no recorded bounce.one of
true,falsecomplainedstringoptionaltrue: a complaint was recorded;false: none. A test send's acted-out complaint is no recorded complaint.one of
true,falseopenedstringoptionaltrue: opened (or clicked) at least once;false: never.one of
true,falseclickedstringoptionaltrue: a link clicked at least once;false: never.one of
true,falsecreatedAfterstringoptionalOnly messages accepted at or after this time (inclusive).
date-time
createdBeforestringoptionalOnly messages accepted 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 OutboundMessage 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.
idstringrequireduuid
messageTypestringrequiredmarketing(fromcampaignorjourney) ortransactional(neither).one of
marketing,transactionalchannelstringrequiredone of
email,pushstatusstringrequiredone of
queued,sending,skipped,sent,failed,delivered,bounced,complainedcampaignobject | nullrequiredThe campaign it came from; null for any other message.
2 child attributes
idstringrequireduuid
namestringrequiredThe campaign's current name.
journeyobject | nullrequiredThe journey it came from, deleted or not; null for any other message.
5 child attributes
idstring | nullrequiredNull once the journey is deleted.
uuid
namestring | nullrequiredThe journey's current name; null once it is deleted.
deletedbooleanrequiredThe journey was deleted after sending this. Its messages and their counts stay; nothing names the journey any more.
enrollmentIdstringrequiredThe enrollment that sent it.
uuid
stepIdstringrequiredThe id of the step that sent it.
templateobject | nullrequiredThe stored template and published version it was sent from; null for inline content.
2 child attributes
idstringrequireduuid
versionintegerrequiredmin > 0
copyobject | nullrequiredSet on a
ccorbcccopy; null on the message itself.2 child attributes
kindstringrequiredone of
cc,bccofstringrequiredThe message it is a copy of.
uuid
contactobject | nullrequiredWho it was for; null when the contact was deleted, or the message passed the retention period: it no longer names anyone.
5 child attributes
idstringrequireduuid
externalIdstring | nullrequiredemailstring | nullrequiredThe contact's email now, which may differ from
recipientEmail.firstNamestring | nullrequiredThe contact's first name now.
lastNamestring | nullrequiredThe contact's last name now.
recipientEmailstring | nullrequiredThe email address the message went to, frozen at the first attempt; null until then, and for push.
simulatedbooleanrequiredSent to a reserved test address (
example.comand the like): it passed every check a real send does but was never handed to the provider. Any outcome was simulated from the address, as[email protected]simulates a bounce.correlationIdstring | nullrequiredThe reference a transactional send carried; null otherwise.
sendAtstring | nullrequiredWhen a timed transactional send is due; null for one sent at once.
date-time
sentAtstring | nullrequiredWhen it was handed to the provider.
date-time
deliveredAtstring | nullrequiredWhen the provider confirmed delivery.
date-time
openedAtstring | nullrequiredFirst open, when tracked: a person's first open or click, or a machine's open while only a machine has opened it.
date-time
openedByMachinebooleanrequiredOnly a machine has opened it so far: a mail app fetched its images with no reader (Apple Mail Privacy Protection, Gmail's prefetch on delivery) or a mail security scanner checked it. A click or a later open by a person clears it.
clickedAtstring | nullrequiredA person's first click, when tracked.
date-time
clickedByMachinebooleanrequiredA machine followed one of its links: a mail security scanner checking it on delivery, a link preview. Such a click sets no
clickedAtand sends no webhook.complainedAtstring | nullrequiredWhen the recipient marked it as spam (the first complaint); null for a simulated one.
date-time
bounceobject | nullrequiredThe hard bounce: set when
statusisbounced; null otherwise. A soft bounce is afailurewith reasontransient_bounce.3 child attributes
occurredAtstringrequiredWhen it happened.
date-time
typestringrequiredWhy:
mailbox_not_found,mailbox_full,suppressed(the provider refuses the address), orgeneralfor any other reason.one of
mailbox_not_found,mailbox_full,suppressed,generaldetailstring | nullrequiredThe receiving server's reply, such as
smtp; 550 5.1.1 user unknown; null for a simulated bounce.
failureobject | nullrequiredSet when
statusisfailed; null otherwise.2 child attributes
occurredAtstringrequiredWhen it happened.
date-time
reasonstringrequiredWhy sending broke, such as
provider_rejected(the provider refused the content) ortransient_bounce.not_sent: a problem on Kirora's side stopped it; nothing in your content, audience or setup caused it, and Kirora is alerted. In rare cases the provider may have delivered it before the problem.
skipobject | nullrequiredSet when
statusisskipped; null otherwise.3 child attributes
occurredAtstringrequiredWhen it happened.
date-time
reasonstringrequiredWhich guard stopped it before sending, such as
suppressed,consent_missingorcancelled;fallback_not_needed: a transactionalfallbackOrderfallback whose first channel arrived;plan_limit_reached: a fallback the plan had no room for when it was due;sending_review_required: email from a sending domain Kirora has not approved yet.suppressionReasonstring | nullrequiredWith
suppressed: why the address is blocked:unsubscribed,bounced,complained,complained_transactional,manualorimported. Null otherwise.one of
manual,imported,unsubscribed,bounced,complained,complained_transactional
createdAtstringrequireddate-time