---
title: "Get transactional message deliveries"
method: GET
path: "/v1/transactional/{transactional_id}/messages"
tags: ["Transactional"]
---

# Get transactional message deliveries

`GET /v1/transactional/{transactional_id}/messages`

## Request

- Base URL: `https://api.customer.io`
- URL: `https://api.customer.io/v1/transactional/{transactional_id}/messages`
- Auth: HTTP bearer

Returns information about the deliveries (instances of messages sent to individual people) from a transactional message. Provide query parameters to refine the metrics you want to return.

Use the `start_ts` and `end_ts` to find messages within a time range. If your request doesn't include `start_ts` and `end_ts` parameters, we'll return the most recent 6 months of messages. If your `start_ts` and `end_ts` range is more than 12 months, we'll return 12 months of data from the most recent timestamp in your request. Timestamps reflect when deliveries were created in our system, not when they were actually sent to recipients. There may be a delay between creation and sending.

## Response `200`

Returns an array of `messages`. Each object represents a different delivery originating from the transactional ID. 

For transactional messages, the action, one-time send, automation, content, and broadcast IDs are all `null`. All deliveries originate from the transactional ID in the path of your request.

- object
  - `messages` MessageObject[]
    - `id` string: The identifier for a delivery—the instance of a message intended for an individual recipient.
    - `deduplicate_id` string: An identifier in the format `id:timestamp` where the id is for the object you're working with (Automations, Deliveries, Exports, Identities, One-time sends, Segments, and Templates), and the timestamp is the last time the object was updated.
    - `message_template_id` integer: The identifier of the message template used to create a message.
    - `customer_id` string, nullable: The ID of a customer profile, analogous to a "person" in the UI. If your workspace supports multiple identifiers (email and ID), this value can be null.
    - `customer_identifiers` CustomerIdentifiers: Identifiers for the person in a response—`id`, `cio_id`, and `email`. Unset `id` or `email` values are `null`. We recommend this object over the less descriptive `customer_id`. This object doesn't include `phone`, even if your workspace uses phone numbers as an identifier; look for the person's `phone` attribute instead.
      - `email` string, email, nullable, required: A person's email address, if set.
      - `id` string, nullable, required: A person's unique ID, if set. This is the same as the `customer_id` if present.
      - `cio_id` string, required: A unique identifier set by Customer.io, used to reference a person if you want to update their identifiers.
    - `recipient` string: The recipient address for an action.
    - `subject` string: The subject line for an `email` action.
    - `metrics` MessageMetrics: Metrics for an individual instance of a message; each item in the object represents the timestamp when a message achieved a particular metric. This object only contains metrics that have been recorded.
      - `bounced` integer: The timestamp when the message `bounced`.
      - `clicked` integer: The timestamp when the message was `clicked`.
      - `human_clicked` integer: The number of `clicked` messages excluding machine clicks. This metric is reliable starting April 20, 2025. [Learn more](/messaging/metrics/analytics/#delivery-metrics).
      - `prefetch_clicked` integer: The number of `clicked` messages attributed to machines. This metric is reliable starting April 20, 2025.
      - `converted` integer: The timestamp when the message was `converted`.
      - `created` integer: The timestamp when the message was `created`.
      - `delivered` integer: The timestamp when the message was `delivered`.
      - `drafted` integer: The timestamp when the message was `drafted`.
      - `dropped` integer: The timestamp when the message was `dropped`.
      - `failed` integer: The timestamp when the message `failed`.
      - `opened` integer: The timestamp when the message was `opened`.
      - `human_opened` integer: The number of `opened` messages 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` messages attributed to machines. This metric is reliable starting March 20, 2025.
      - `sent` integer: The timestamp when the message was `sent`.
      - `spammed` integer: The timestamp when the message was marked as spam.
      - `undeliverable` integer: The timestamp when the message became `undeliverable`.
      - `unsubscribed` integer: The timestamp when a person unsubscribed based on this message.
    - `created` integer: The date time when the referenced ID was created.
    - `failure_message` string, nullable: Explains why a message failed, if applicable.
    - `campaign_id` integer: The identifier for an automation.
    - `action_id` integer: The identifier for an action.
    - `parent_action_id` integer: The ID of the parent action, if the action occurred within an automation and has a parent (like a randomized split, etc).
    - `newsletter_id` integer: The identifier for a one-time send.
    - `content_id` integer: The identifier for a message in a one-time send. One-time sends can have multiple content IDs (for multi-language messages or A/B tests).
    - `broadcast_id` integer: The identifier for a broadcast.
    - `trigger_event_id` string: The id of the event that triggered an event-triggered automation (not an API-triggered broadcast).
    - `forgotten` boolean: If true message contents are not retained by Customer.io.
    - `tracked_responses` object: Tracked in-app survey responses, keyed by response option name. Present only when `get_tracked_responses` is `true`.
    - `type` 'email' | 'webhook' | 'twilio' | 'push' | 'in_app' | 'slack' | 'whatsapp' | 'live_notification': The type of message or action for a delivery, automation action, or related object. Includes channels that one-time sends do not support (for example, `slack` and `whatsapp`).

## Other responses

- `404`: The transactional message you requested does 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/transactional/:transactional_id/messages/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)
