List outbound messagesMenu

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

limitintegeroptional

How many items a page holds: 1 to 100, 20 by default.

min > 0 · max 100 · default 20

cursorstringoptional

Where 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

statusstringoptional

Only messages in this status.

one of queued, sending, skipped, sent, failed, delivered, bounced, complained

channelstringoptional

Only messages on this channel.

one of email, push

recipientstringoptional

The exact address the message went to.

querystringoptional

Part of the recipient's email address or name, matched against the contact the message went to.

1–100 characters

messageTypestringoptional

Only messages of this type: marketing or transactional.

one of marketing, transactional

campaignIdstringoptional

Only messages from this campaign.

uuid

journeyIdstringoptional

Only messages from this journey.

uuid

stepIdstringoptional

With 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}$

templateIdstringoptional

Only transactional sends from this stored template; no other message records one.

uuid

correlationIdstringoptional

Only the transactional sends that carried this correlationId.

1–255 characters

sentstringoptional

true: handed to the provider, whatever happened after; false: never sent (queued, failed before sending or skipped).

one of true, false

deliveredstringoptional

true: delivery was confirmed, even if a complaint or bounce came later; false: never confirmed.

one of true, false

bouncedstringoptional

true: 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, false

complainedstringoptional

true: a complaint was recorded; false: none. A test send's acted-out complaint is no recorded complaint.

one of true, false

openedstringoptional

true: opened (or clicked) at least once; false: never.

one of true, false

clickedstringoptional

true: a link clicked at least once; false: never.

one of true, false

createdAfterstringoptional

Only messages accepted at or after this time (inclusive).

date-time

createdBeforestringoptional

Only messages accepted before this time (exclusive).

date-time

Header parameters

Kirora-Workspacestringoptional

Partner 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.

idstringrequired

uuid

messageTypestringrequired

marketing (from campaign or journey) or transactional (neither).

one of marketing, transactional

channelstringrequired

one of email, push

statusstringrequired

one of queued, sending, skipped, sent, failed, delivered, bounced, complained

campaignobject | nullrequired

The campaign it came from; null for any other message.

2 child attributes
idstringrequired

uuid

namestringrequired

The campaign's current name.

journeyobject | nullrequired

The journey it came from, deleted or not; null for any other message.

5 child attributes
idstring | nullrequired

Null once the journey is deleted.

uuid

namestring | nullrequired

The journey's current name; null once it is deleted.

deletedbooleanrequired

The journey was deleted after sending this. Its messages and their counts stay; nothing names the journey any more.

enrollmentIdstringrequired

The enrollment that sent it.

uuid

stepIdstringrequired

The id of the step that sent it.

templateobject | nullrequired

The stored template and published version it was sent from; null for inline content.

2 child attributes
idstringrequired

uuid

versionintegerrequired

min > 0

copyobject | nullrequired

Set on a cc or bcc copy; null on the message itself.

2 child attributes
kindstringrequired

one of cc, bcc

ofstringrequired

The message it is a copy of.

uuid

contactobject | nullrequired

Who it was for; null when the contact was deleted, or the message passed the retention period: it no longer names anyone.

5 child attributes
idstringrequired

uuid

externalIdstring | nullrequired
emailstring | nullrequired

The contact's email now, which may differ from recipientEmail.

firstNamestring | nullrequired

The contact's first name now.

lastNamestring | nullrequired

The contact's last name now.

recipientEmailstring | nullrequired

The email address the message went to, frozen at the first attempt; null until then, and for push.

simulatedbooleanrequired

Sent to a reserved test address (example.com and 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 | nullrequired

The reference a transactional send carried; null otherwise.

sendAtstring | nullrequired

When a timed transactional send is due; null for one sent at once.

date-time

sentAtstring | nullrequired

When it was handed to the provider.

date-time

deliveredAtstring | nullrequired

When the provider confirmed delivery.

date-time

openedAtstring | nullrequired

First open, when tracked: a person's first open or click, or a machine's open while only a machine has opened it.

date-time

openedByMachinebooleanrequired

Only 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 | nullrequired

A person's first click, when tracked.

date-time

clickedByMachinebooleanrequired

A machine followed one of its links: a mail security scanner checking it on delivery, a link preview. Such a click sets no clickedAt and sends no webhook.

complainedAtstring | nullrequired

When the recipient marked it as spam (the first complaint); null for a simulated one.

date-time

bounceobject | nullrequired

The hard bounce: set when status is bounced; null otherwise. A soft bounce is a failure with reason transient_bounce.

3 child attributes
occurredAtstringrequired

When it happened.

date-time

typestringrequired

Why: mailbox_not_found, mailbox_full, suppressed (the provider refuses the address), or general for any other reason.

one of mailbox_not_found, mailbox_full, suppressed, general

detailstring | nullrequired

The receiving server's reply, such as smtp; 550 5.1.1 user unknown; null for a simulated bounce.

failureobject | nullrequired

Set when status is failed; null otherwise.

2 child attributes
occurredAtstringrequired

When it happened.

date-time

reasonstringrequired

Why sending broke, such as provider_rejected (the provider refused the content) or transient_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 | nullrequired

Set when status is skipped; null otherwise.

3 child attributes
occurredAtstringrequired

When it happened.

date-time

reasonstringrequired

Which guard stopped it before sending, such as suppressed, consent_missing or cancelled; fallback_not_needed: a transactional fallbackOrder fallback 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 | nullrequired

With suppressed: why the address is blocked: unsubscribed, bounced, complained, complained_transactional, manual or imported. Null otherwise.

one of manual, imported, unsubscribed, bounced, complained, complained_transactional

createdAtstringrequired

date-time