---
title: Message Lifecycle
url: https://docs.kaltura.com/docs/events-collaboration/messaging-api/messaging-message-lifecycle
---

## Message Lifecycle

### 7.1 Bulk Message Status

Each `message/send` call creates a bulk message that progresses through these states:

| Status | Description |
|--------|-------------|
| `sending` | Message is being processed and individual emails are being dispatched |
| `completed` | All individual emails have been processed |
| `failed` | Processing failed (check `errorEnum` and `errorDescription`) |
| `canceled` | Message was canceled before completion |

### 7.2 Discrete Message Status

Each recipient generates a discrete message with its own delivery lifecycle:

| Status | Description |
|--------|-------------|
| `sending` | Email queued for delivery |
| `processed` | Email accepted by the email provider |
| `delivered` | Email delivered to recipient's mailbox |
| `deferred` | Delivery delayed, will retry |
| `dropped` | Email dropped (invalid address, policy violation) |
| `bounce` | Email bounced (mailbox full, domain not found) |
| `error` | Delivery error |

### 7.3 Engagement Tracking Events

After delivery, these tracking events may update the discrete message status:

| Event | Description |
|-------|-------------|
| `open` | Recipient opened the email |
| `click` | Recipient clicked a link in the email |
| `spamreport` | Recipient reported the email as spam |
| `unsubscribed` | Recipient unsubscribed via the email link |

### 7.4 Discrete Error Codes

| Error | Description |
|-------|-------------|
| `emailNotResolvedToValidEmailAddress` | User ID could not be resolved to an email |
| `userUnsubscribeFromThisGroup` | User unsubscribed from the message's unsubscribe group |
| `userNotFoundInOurDb` | User ID not found in the system |
| `createMagicLinkFailed` | Failed to generate a magic login link |
| `createUnsubscribeUriLinkFailed` | Failed to generate an unsubscribe link |
| `createJwtQrCodeFailed` | Failed to generate a QR code |
| `sendGridError` | Email provider returned an error |
