# Journeys Message Metrics Source

## How it works[](#how-it-works)

Customer.io automatically captures events relating to message activity—the messages you send, whether or not people open them, when people click them, and so on. So when you look at your integrations, you’ll see **Customer.io (Workspaces)** as a data source that you can connect to other services.

Treating incoming metrics as a source lets you send data to destinations that help you aggregate and analyze audience data, so you follow and chart how your audience reacts to different message channels in your marketing stack. And understanding our payload format helps you accurately map metrics from Customer.io to other platforms you might use to analyze your audience data.

[![all API credentials are listed as individual sources](https://docs.customer.io/images/cdp-journeys-sources.png)](#01c51e2f885f5f0492fd10b42a7fd4ad-lightbox)

## What metrics do we send out of Customer.io?[](#what-metrics-do-we-send-out-of-customerio)

See our [semantic events specification](/integrations/api/cdp/#tag/Semantic-Events) for a complete list of the events, and properties, we send out of Customer.io.

Customer.io captures and sends the following semantic events downstream to your connected destinations:

Channel

Events

Email

Email Drafted, Email Attempted, Email Sent, Email Delivered, Email Opened, Email Link Clicked, Email Converted, Email Unsubscribed, Email Bounced, Email Suppressed, Email Marked as Spam, Email Failed

Push

Push Drafted, Push Attempted, Push Sent, Push Delivered, Push Opened, Push Link Clicked, Push Converted, Push Bounced, Push Suppressed, Push Failed

SMS

SMS Drafted, SMS Attempted, SMS Sent, SMS Delivered, SMS Link Clicked, SMS Converted, SMS Bounced, SMS Failed

In-App

In-App Drafted, In-App Attempted, In-App Sent, In-App Opened, In-App Clicked, In-App Converted, In-App Failed

Webhook

Webhook Drafted, Webhook Attempted, Webhook Sent, Webhook Link Clicked, Webhook Converted, Webhook Failed

Slack

Slack Drafted, Slack Attempted, Slack Sent, Slack Link Clicked, Slack Failed

Subscription

Subscribed, Unsubscribed, Subscription Preferences Changed

## Metric Events[](#metric-events)

Customer.io metrics are sent as *semantic* track events—they look like any event you’d send to Customer.io using the [`track` method](/integrations/api/cdp/#operation/track), but they have a specific `event` name that combines the channel and metric—like `Email Opened` or `Push Sent`.

The `properties` object contains information about the customer, the message (`delivery_id`), the campaign, broadcast, or transactional ID the message originated from, and so on.

 If you’re familiar with our [reporting webhooks](/integrations/api/webhooks/), you’ll notice this format is different. We send events to external platforms in a standardized track event format rather than the webhook payload format you might subscribe to directly from Customer.io.

### Event Format[](#event-format)

All metric events follow this structure:

Field

Type

Required

Description

`type`

string

Yes

Always `track` for metric events

`event`

string

Yes

The event name (channel + metric, e.g., “Email Opened”, “Push Sent”)

`userId`

string

No

The person’s identifier based on your workspace identifier type

`anonymousId`

string

No

For multi-identifier workspaces, contains the person’s email

`messageId`

string

Yes

Unique identifier for this event (from webhook `event_id`)

`timestamp`

string (ISO 8601)

Yes

When the event occurred

`sentAt`

string (ISO 8601)

Yes

When the event was sent to the destination

`receivedAt`

string (ISO 8601)

No

When the destination received the event

`originalTimestamp`

string (ISO 8601)

No

Original event timestamp

`context`

object

No

Contextual information (may include person traits like email)

`properties`

object

Yes

Event-specific properties (varies by channel and metric)

### Available Events[](#available-events)

We send track events for all message lifecycle metrics across different channels:

*   **Email**: Email Drafted, Email Attempted, Email Sent, Email Delivered, Email Opened, Email Link Clicked, Email Converted, Email Unsubscribed, Email Bounced, Email Suppressed, Email Marked as Spam, Email Failed
*   **Push**: Push Drafted, Push Attempted, Push Sent, Push Delivered, Push Opened, Push Link Clicked, Push Converted, Push Bounced, Push Suppressed, Push Failed
*   **SMS**: SMS Drafted, SMS Attempted, SMS Sent, SMS Delivered, SMS Link Clicked, SMS Converted, SMS Bounced, SMS Failed
*   **In-App**: In-App Drafted, In-App Attempted, In-App Sent, In-App Opened, In-App Clicked, In-App Converted, In-App Failed
*   **Webhook**: Webhook Drafted, Webhook Attempted, Webhook Sent, Webhook Link Clicked, Webhook Converted, Webhook Failed
*   **Slack**: Slack Drafted, Slack Attempted, Slack Sent, Slack Link Clicked, Slack Failed
*   **Subscription**: Subscribed, Unsubscribed, Subscription Preferences Changed

### Common Properties[](#common-properties)

Most metric events include these common properties in the `properties` object:

Property

Type

Description

`customer_id`

string

The person’s customer ID

`delivery_id`

string

Unique identifier for the message delivery

`action_id`

integer

The action ID that sent the message (for campaigns and workflows)

`journey_id`

integer

The workflow ID that sent the message

`parent_action_id`

integer

The parent action ID (for split actions)

`campaign_id`

integer

The campaign ID that sent the message

`broadcast_id`

integer

The broadcast ID that sent the message

`newsletter_id`

integer

The newsletter ID that sent the message

`transactional_message_id`

integer

The transactional message ID that sent the message

`content_id`

integer

The content ID of the message

`trigger_id`

integer

The trigger ID for API-triggered broadcasts

`trigger_event_id`

string

The event ID that triggered the campaign

`userId`

string

A copy of the user identifier in the properties object

### Example: Email Opened Event[](#example-email-opened-event)

```json
{
  "type": "track",
  "event": "Email Opened",
  "userId": "12345",
  "messageId": "01H8F21G9KK14JKX233RDFJCNM",
  "timestamp": "2023-08-22T16:42:55.003Z",
  "sentAt": "2023-08-22T16:42:57.739Z",
  "context": {
    "traits": {
      "email": "cool.person@example.com"
    }
  },
  "properties": {
    "customer_id": "12345",
    "delivery_id": "RKK4AwUAAYoeIC5PHMYd6-vTAYhWkQ==",
    "recipient": "cool.person@example.com",
    "subject": "Password reset request",
    "transactional_message_id": 8,
    "userId": "12345"
  },
  "receivedAt": "2023-08-22T16:42:57.742Z",
  "originalTimestamp": "2023-08-22T16:42:55.000Z"
}
```

### Example: Push Sent Event[](#example-push-sent-event)

Push events include a `recipients` array that contains information about each device the push was sent to:

```json
{
  "type": "track",
  "event": "Push Sent",
  "userId": "12345",
  "messageId": "01H8F21G9KK14JKX233RDFJCNM",
  "timestamp": "2023-08-22T16:42:55.003Z",
  "sentAt": "2023-08-22T16:42:57.739Z",
  "context": {
    "traits": {}
  },
  "properties": {
    "customer_id": "12345",
    "delivery_id": "dgS_ugcCBYUGhAYBlNIe87ANFfGw2QrqUUY1",
    "content_id": 1,
    "newsletter_id": 1,
    "recipients": [
      {
        "device_id": "123",
        "device_platform": "android"
      }
    ],
    "userId": "12345"
  },
  "receivedAt": "2023-08-22T16:42:57.742Z",
  "originalTimestamp": "2023-08-22T16:42:55.000Z"
}
```