---
title: "Get automation action metrics"
method: GET
path: "/v1/campaigns/{campaign_id}/actions/{action_id}/metrics"
tags: ["Automations"]
---

# Get automation action metrics

`GET /v1/campaigns/{campaign_id}/actions/{action_id}/metrics`

## Request

- Base URL: `https://api.customer.io`
- URL: `https://api.customer.io/v1/campaigns/{campaign_id}/actions/{action_id}/metrics`
- Auth: HTTP bearer

Returns metrics for an individual action, both in total and as a series of counts, oldest first—the 0-index of any result is the oldest point in the window.

**We recommend version 2. Send `version=2`.** It accepts an explicit `start`, `end`, and `res`, reported in the `tz` you choose. Without it, the endpoint answers with version 1 behavior instead: a window built from `period` and `steps`, always in Eastern time.

Version 1 can't return fewer than 2 steps of any period. `?period=days&steps=1` means two days—the 48 hours before the request—and `?period=days&steps=0` returns the maximum for the period, the same as `?period=days&steps=45`.

**Multi-language messages**

If the action is a [multi-language](/messaging/channels/localization/getting-started/) message, you can retrieve metrics for a single language variant or all language variants. To retrieve metrics for a single language variant, pass the `id` of the action. To retrieve aggregate metrics and a breakdown for each language variant, pass the `multi_language_branch_action_id`, which is the same for each variant of a message. You can get both ids from the [List automation actions](/integrations/api/app/tag/automations/listCampaignActions/) endpoint.

If you pass the `multi_language_branch_action_id`, then the `metric` object shows the *total* across every variant. The `language_variants` object shows a breakdown for each language variant. 

If you want to get the sum of all metrics across all of an automation's actions, you can use each action id of a multi-language message, like you would for other types of actions.

## Response `200`

Returns action metrics by `series`, where each increment is based on the `res` in your request. For a multi-language message, also returns a per-variant breakdown in `language_variants`.

- object
  - `start` string, ISO 8601: The start of the window we reported on, in ISO 8601 format.
  - `end` string, ISO 8601: The end of the window we reported on, in ISO 8601 format.
  - `res` 'hours' | 'hourly' | 'days' | 'daily' | 'weeks' | 'weekly' | 'months' | 'monthly': The resolution we reported at.
  - `metric` object
    - `series` PeriodMessageMetrics: Metrics grouped by the requested resolution. Each property is an array where each entry represents one period, such as one day.
      - `attempted` integer[]: The number of `attempted` messages.
      - `bounced` integer[]: The number of `bounced` messages.
      - `clicked` integer[]: The number of `clicked` messages.
      - `human_clicked` integer[]: The number of `clicked` emails excluding machine clicks. This metric is reliable starting April 20, 2025. [Learn more](/messaging/metrics/analytics/#delivery-metrics).
      - `machine_clicked` integer[]: The number of `clicked` emails attributed to machines—security scanners, bot user agents, known proxy services, and repetitive click patterns. This metric is reliable starting April 20, 2025. [Learn more](/messaging/metrics/analytics/#delivery-metrics).
      - `converted` integer[]: The number of `converted` messages.
      - `created` integer[]: The number of `created` messages.
      - `deferred` integer[]: The number of `deferred` messages.
      - `delivered` integer[]: The number of `delivered` messages.
      - `drafted` integer[]: The number of `drafted` messages.
      - `failed` integer[]: The number of `failed` messages.
      - `opened` integer[]: The number of `opened` messages.
      - `human_opened` integer[]: The number of `opened` emails excluding machine opens. This metric is reliable starting March 20, 2025. [Learn more](/messaging/metrics/analytics/#delivery-metrics).
      - `prefetch_opened` integer[]: The number of `opened` emails attributed to machines. This metric is reliable starting March 20, 2025.
      - `sent` integer[]: The number of sent messages.
      - `spammed` integer[]: The number of spam complaints.
      - `suppressed` integer[]: The number of `suppressed` messages.
      - `undeliverable` integer[]: The number of `undeliverable` messages.
      - `topic_unsubscribed` integer[]: The number of topic unsubscribes in a given period.
      - `unsubscribed` integer[]: The number of unsubscribes attributed to the automation or message.
      - `replied` integer[]: The number of SMS/MMS messages a person replied to with a keyword. [Learn more about inbound messages](/messaging/channels/sms/inbound/get-started/).
      - `untracked` integer[]: The number of `sent` emails whose open pixel we withheld because the person opted out of open tracking. We exclude these from the open-rate denominator; click tracking is unaffected.
      - `open_untracked` integer[]: The number of emails delivered with open tracking inactive for any reason—including the consent opt-outs that `untracked` counts and messages sent with open tracking disabled. We subtract these from the open-rate denominator.
      - `link_untracked` integer[]: The number of emails delivered with link tracking inactive for any reason. We subtract these from the click-rate denominator.
      - `tracking_consent_granted` integer[]: The number of people who granted consent to email open tracking in the period.
      - `tracking_consent_denied` integer[]: The number of people who denied consent to email open tracking in the period.
  - `language_variants` LanguageVariantMetrics: Metrics for each language variant of a multi-language message, keyed by the variant's action ID. Only returned when you request metrics for a multi-language branch action.

## Other responses

- `400`: The `campaignID` or `actionID` is invalid.
- `404`: The automation and/or action do not exist.
- `429`: Your request is over the 10-per-second limit. `Retry-After` tells you how many seconds you must wait before you send the next request.

## Changes

- **2026-09-02** `5da2740beeb5`: 1 info
  - added the media type `application/json` for the response with the status `429`

[Operation history](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/changes/v1/campaigns/:campaign_id/actions/:action_id/metrics/get.md)

---

[API](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference.md) - [All operations](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/llms.txt) - [OpenAPI document](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/revisions/ac0b282053fe?raw)
