JavaScript
import Courier from '@trycourier/courier';
const client = new Courier({
apiKey: process.env['COURIER_API_KEY'], // This is the default and can be omitted
});
const journeyRunStepsResponse = await client.journeys.runs.listSteps('x');
console.log(journeyRunStepsResponse.steps);import os
from courier import Courier
client = Courier(
api_key=os.environ.get("COURIER_API_KEY"), # This is the default and can be omitted
)
journey_run_steps_response = client.journeys.runs.list_steps(
"x",
)
print(journey_run_steps_response.steps)package main
import (
"context"
"fmt"
"github.com/trycourier/courier-go/v4"
"github.com/trycourier/courier-go/v4/option"
)
func main() {
client := courier.NewClient(
option.WithAPIKey("My API Key"),
)
journeyRunStepsResponse, err := client.Journeys.Runs.ListSteps(context.TODO(), "x")
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", journeyRunStepsResponse.Steps)
}
package com.courier.example;
import com.courier.client.CourierClient;
import com.courier.client.okhttp.CourierOkHttpClient;
import com.courier.models.journeys.JourneyRunStepsResponse;
import com.courier.models.journeys.runs.RunListStepsParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
CourierClient client = CourierOkHttpClient.fromEnv();
JourneyRunStepsResponse journeyRunStepsResponse = client.journeys().runs().listSteps("x");
}
}require "courier"
courier = Courier::Client.new(api_key: "My API Key")
journey_run_steps_response = courier.journeys.runs.list_steps("x")
puts(journey_run_steps_response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Courier\Client;
use Courier\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('COURIER_API_KEY') ?: 'My API Key');
try {
$journeyRunStepsResponse = $client->journeys->runs->listSteps('x');
var_dump($journeyRunStepsResponse);
} catch (APIException $e) {
echo $e->getMessage();
}using System;
using TryCourier;
using TryCourier.Models.Journeys.Runs;
CourierClient client = new();
RunListStepsParams parameters = new() { RunID = "x" };
var journeyRunStepsResponse = await client.Journeys.Runs.ListSteps(parameters);
Console.WriteLine(journeyRunStepsResponse);courier journeys:runs list-steps \
--api-key 'My API Key' \
--run-id xcurl --request GET \
--url https://api.courier.com/journeys/runs/{run_id}/steps \
--header 'Authorization: Bearer <token>'{
"steps": [
{
"node_id": "node_1786394360065_4z4dv0oxk",
"action": "send",
"status": "PROCESSED",
"created_at": "2026-08-10T23:40:17.015Z",
"updated_at": "2026-08-10T23:40:48.879Z",
"message_id": "0nbHxOAZ701QO2wFU9z81"
},
{
"node_id": "node_1770752689239_ek6riz4xv",
"action": "exit",
"status": "PROCESSED",
"created_at": "2026-08-10T23:40:17.015Z",
"updated_at": "2026-08-10T23:41:09.702Z"
}
]
}{
"message": "invalid run id",
"type": "invalid_request_error"
}{
"message": "run not found",
"type": "invalid_request_error"
}Journeys
List steps for a Journey run
List the per-node state of one Journey run, in full — this endpoint is not paginated. Each step’s node_id is the id of the node in the published Journey, so a step maps directly onto the Journey graph. message_id is present on send steps that produced a message; follow it to GET /messages/{message_id} for delivery status.
GET
/
journeys
/
runs
/
{run_id}
/
steps
JavaScript
import Courier from '@trycourier/courier';
const client = new Courier({
apiKey: process.env['COURIER_API_KEY'], // This is the default and can be omitted
});
const journeyRunStepsResponse = await client.journeys.runs.listSteps('x');
console.log(journeyRunStepsResponse.steps);import os
from courier import Courier
client = Courier(
api_key=os.environ.get("COURIER_API_KEY"), # This is the default and can be omitted
)
journey_run_steps_response = client.journeys.runs.list_steps(
"x",
)
print(journey_run_steps_response.steps)package main
import (
"context"
"fmt"
"github.com/trycourier/courier-go/v4"
"github.com/trycourier/courier-go/v4/option"
)
func main() {
client := courier.NewClient(
option.WithAPIKey("My API Key"),
)
journeyRunStepsResponse, err := client.Journeys.Runs.ListSteps(context.TODO(), "x")
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", journeyRunStepsResponse.Steps)
}
package com.courier.example;
import com.courier.client.CourierClient;
import com.courier.client.okhttp.CourierOkHttpClient;
import com.courier.models.journeys.JourneyRunStepsResponse;
import com.courier.models.journeys.runs.RunListStepsParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
CourierClient client = CourierOkHttpClient.fromEnv();
JourneyRunStepsResponse journeyRunStepsResponse = client.journeys().runs().listSteps("x");
}
}require "courier"
courier = Courier::Client.new(api_key: "My API Key")
journey_run_steps_response = courier.journeys.runs.list_steps("x")
puts(journey_run_steps_response)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Courier\Client;
use Courier\Core\Exceptions\APIException;
$client = new Client(apiKey: getenv('COURIER_API_KEY') ?: 'My API Key');
try {
$journeyRunStepsResponse = $client->journeys->runs->listSteps('x');
var_dump($journeyRunStepsResponse);
} catch (APIException $e) {
echo $e->getMessage();
}using System;
using TryCourier;
using TryCourier.Models.Journeys.Runs;
CourierClient client = new();
RunListStepsParams parameters = new() { RunID = "x" };
var journeyRunStepsResponse = await client.Journeys.Runs.ListSteps(parameters);
Console.WriteLine(journeyRunStepsResponse);courier journeys:runs list-steps \
--api-key 'My API Key' \
--run-id xcurl --request GET \
--url https://api.courier.com/journeys/runs/{run_id}/steps \
--header 'Authorization: Bearer <token>'{
"steps": [
{
"node_id": "node_1786394360065_4z4dv0oxk",
"action": "send",
"status": "PROCESSED",
"created_at": "2026-08-10T23:40:17.015Z",
"updated_at": "2026-08-10T23:40:48.879Z",
"message_id": "0nbHxOAZ701QO2wFU9z81"
},
{
"node_id": "node_1770752689239_ek6riz4xv",
"action": "exit",
"status": "PROCESSED",
"created_at": "2026-08-10T23:40:17.015Z",
"updated_at": "2026-08-10T23:41:09.702Z"
}
]
}{
"message": "invalid run id",
"type": "invalid_request_error"
}{
"message": "run not found",
"type": "invalid_request_error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
A unique identifier representing the Journey run.
Minimum string length:
1Response
Every step of the Journey run.
Every step of a Journey run. Not paginated.
Show child attributes
Show child attributes
⌘I