# Retrieve a journey's metrics

Source: https://kirora.io/docs/api/reference/getJourneyMetrics

`GET /v1/journeys/{id}/metrics`

Requires an API key with the `journeys:read` scope. [About keys and scopes](https://kirora.io/docs/api/reference/authentication)

Works with integration, agent and partner keys.

Enrollments, messages and conversions for one journey over the report window (`from` inclusive, `to` exclusive, the last 30 days by default), counted by when each thing happened: an enrollment in the window started in it, wherever it is now. `active` is now. `exited` includes `conversionGoalReached`, the enrollments that left by reaching a conversion goal. `messages` counts what failed or was skipped; `conversions` gives each conversion goal of the journey its conversions and gross revenue (before refunds), credited to its messages. For where people are step by step, use `GET /v1/journeys/{id}/step-metrics`. Deleting a contact deletes their runs of the journey and those messages, so a past window can later show less than it did.

## Path parameters

- `id` (string, required, uuid) — The journey's id.

## Query parameters

- `from` (string, optional) — Start of the window, inclusive: a date-time, or a date meaning the start of that day in the workspace timezone. Give with `to`; omit both for the last 30 days.
- `to` (string, optional) — End of the window, exclusive, in the same forms. To include a whole last day, pass the day after it: `from=2026-10-01&to=2026-10-08` covers 1 to 7 October. No later than the end of today; a window touches at most 366 days. Give with `from`.

## Header parameters

- `Kirora-Workspace` (string, optional, pattern `^[A-Za-z0-9._:-]{1,128}$`) — Partner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.

## Returns

Returns `200 OK` with a `JourneyMetrics` in `data`. Otherwise returns an error; [Errors](https://kirora.io/docs/api/reference/errors) lists every code and which to retry.

- `enrolled` (integer, required, min 0) — Enrollments started.
- `active` (integer, required, min 0) — Enrollments in progress now.
- `completed` (integer, required, min 0) — Enrollments that reached the end.
- `exited` (integer, required, min 0) — Enrollments ended early: by an exit event, a conversion goal, a filter, by hand or as the journey ended.
- `conversionGoalReached` (integer, required, min 0) — Of `exited`, those that left by reaching a conversion goal (a `conversion_goal` exit).
- `email` (JourneyEmailCounts, required) — The journey's email messages created in the window (`history.from` to `history.to`), across every version of its steps.
  - `created` (integer, required, min 0) — Messages created.
  - `queued` (integer, required, min 0) — Waiting to be sent.
  - `sending` (integer, required, min 0) — Being handed to the provider.
  - `failed` (integer, required, min 0) — Could not be sent.
  - `skipped` (integer, required, min 0) — Not sent, such as for a missing consent or a limit.
  - `sent` (integer, required, min 0) — Handed to the provider, whatever happened after.
  - `delivered` (integer, required, min 0) — Confirmed delivered, whatever happened after; test sends to `delivered@example.com` included (see `simulated`).
  - `bounced` (integer, required, min 0) — Rejected by the recipient server; a test send to `bounce@example.com` is not counted.
  - `complained` (integer, required, min 0) — Marked as spam by the recipient; a test send to `complaint@example.com` is not counted.
  - `opened` (integer, required, min 0) — Opened at least once.
  - `openedByMachine` (integer, required, min 0) — Of `opened`, those only a machine opened: a mail app fetched its images with no reader (Apple Mail Privacy Protection, Gmail's prefetch on delivery) or a mail security scanner checked it.
  - `clicked` (integer, required, min 0) — With a link clicked at least once, by a person.
  - `clickedByMachine` (integer, required, min 0) — Whose links a machine followed, such as a mail security scanner; counted in neither `clicked` nor `opened`.
  - `unsubscribed` (integer, required, min 0) — Whose recipient opted out through the email's link.
  - `simulated` (integer, required, min 0) — Of `sent`, test sends whose outcome was acted out: those to `delivered@`, `bounce@` or `complaint@example.com` (the transactional guide's "Test addresses"). The bounce and complaint rates leave them out.
- `push` (JourneyPushCounts, required) — The journey's push messages created in the window, across every version of its steps.
  - `created` (integer, required, min 0) — Messages created.
  - `queued` (integer, required, min 0) — Waiting to be sent.
  - `sending` (integer, required, min 0) — Being handed to the provider.
  - `failed` (integer, required, min 0) — Could not be sent.
  - `skipped` (integer, required, min 0) — Not sent, such as for a missing consent or a limit.
  - `sent` (integer, required, min 0) — Handed to the provider, whatever happened after.
  - `opened` (integer, required, min 0) — Opened at least once.
  - `clicked` (integer, required, min 0) — With a link clicked at least once, by a person.
- `messages` (object, required) — The journey's messages created in the window that did not go out.
  - `failed` (integer, required, min 0) — Messages that could not be sent, all channels.
  - `skipped` (integer, required, min 0) — Messages not sent (no consent, suppressed, over a message limit), all channels. Some skips are expected, so this alone need not mean a problem.
- `conversions` (JourneyConversions[], required) — Per conversion goal of the journey, conversions in the window credited to its messages.
  - `conversionGoal` (object, required) — The conversion goal.
    - `id` (string, required, uuid)
    - `eventName` (string, required) — The event the conversion goal counts.
  - `count` (integer, required, min 0) — Conversions credited to the journey's messages.
  - `revenue` (object | null, required) — The total of the goal's value; `null` when it reads no value, or when withheld.
    - `currency` (string | null, required) — The goal's currency; `null` when it names none.
    - `value` (number, required, min 0) — Gross, before refunds.
  - `revenueWithheld` (boolean, required) — True when the goal's value property is a masked attribute this viewer may not see, so `revenue` is null.
- `history` (object, required) — Counts per day over the report window.
  - `from` (string, required, date-time) — Start of the window, inclusive.
  - `to` (string, required, date-time) — End of the window, exclusive.
  - `timezone` (string, required) — The workspace timezone the days are in.
  - `basis` ("event_time", required) — Days are counted by when each event happened.
  - `series` (object[], required) — One entry per day in the window.
    - `startsAt` (string, required, date-time) — When this day starts in `timezone`, given as an instant.
    - `enrolled` (integer, required, min 0) — Enrollments started that day.
    - `completed` (integer, required, min 0) — Enrollments that reached the end that day.
    - `exited` (integer, required, min 0) — Enrollments ended early that day.

## Example

```bash
curl https://api.kirora.io/v1/journeys/018f2a4e-6b1c-7d3e-9f40-37386ae05a6b/metrics \
  -H "Authorization: Bearer $KIRORA_API_KEY"
```

Response `200`:

```json
{
  "data": {
    "enrolled": 128,
    "active": 12,
    "completed": 114,
    "exited": 2,
    "conversionGoalReached": 1,
    "email": {
      "created": 240,
      "queued": 0,
      "sending": 0,
      "failed": 2,
      "skipped": 6,
      "sent": 232,
      "delivered": 228,
      "bounced": 4,
      "complained": 0,
      "opened": 131,
      "openedByMachine": 38,
      "clicked": 29,
      "clickedByMachine": 3,
      "unsubscribed": 1,
      "simulated": 0
    },
    "push": {
      "created": 0,
      "queued": 0,
      "sending": 0,
      "failed": 0,
      "skipped": 0,
      "sent": 0,
      "opened": 0,
      "clicked": 0
    },
    "messages": {
      "failed": 2,
      "skipped": 6
    },
    "conversions": [
      {
        "conversionGoal": {
          "id": "0192f3d0-7a1b-7c2d-8e3f-4a5b6c7d8e9f",
          "eventName": "Order Completed"
        },
        "count": 9,
        "revenue": {
          "currency": "USD",
          "value": 450
        },
        "revenueWithheld": false
      }
    ],
    "history": {
      "from": "2026-09-26T00:00:00.000Z",
      "to": "2026-10-03T00:00:00.000Z",
      "timezone": "UTC",
      "basis": "event_time",
      "series": [
        {
          "startsAt": "2026-10-01T00:00:00.000Z",
          "enrolled": 48,
          "completed": 30,
          "exited": 1
        },
        {
          "startsAt": "2026-10-02T00:00:00.000Z",
          "enrolled": 52,
          "completed": 41,
          "exited": 1
        }
      ]
    }
  }
}
```
