COSS

Delivery status

How an email and each of its recipients move through delivery.

Email status

status on the email says whether it was handed to the delivery provider:

StatusMeaning
scheduledWaiting for scheduled_at
canceledCanceled before dispatch
queuedAccepted by COSS, not yet handed over
sentAccepted by the provider (sent_at is set)
failedCould not be sent; see the email.failed event

Recipient status

Delivery happens per recipient. recipients lists every distinct address across to, cc and bcc, each with its own status. A status only moves forward:

queued → sent → delivery_delayed → delivered, then bounced / suppressed / failed, then complained.

suppressed means the recipient was skipped because it is on the environment's suppression list, or the provider reported it as suppressed. An email whose recipients are all suppressed fails with all_recipients_suppressed.

COSS automatically screens a sample of live emails for spam, phishing and other abuse right before sending them. An email it is confident about fails with content_rejected and live sending is suspended until COSS support reviews the account. Sandbox emails are never screened. COSS also emails your organization's owners and admins when it warns about your sending reputation or suspends live sending.

Events

Each change is recorded as an event. List them with coss.email.listEvents (see GET /v1/emails/{id}/events), or receive them as webhooks.

const { :  } = await ..("email_01k7c8m4q2f3e9v6t5r1n0p8yz");

for (const  of ?. ?? []) {
  if (. === "email.bounced") {
    .(., ..bounce?.);
EmailEventData.bounce?: {
    type: "permanent" | "transient" | "undetermined";
    sub_type: string;
    diagnostic_code: string | null;
} | undefined
} }

email.sent, email.failed, email.scheduled, email.rescheduled and email.canceled describe the whole email (recipient is null). Delivery events describe individual recipients. Open and click events name a recipient only when the email had exactly one non-suppressed recipient.

On this page