curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/steps \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/steps"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v5/persons/{person_id}/steps', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.extole.io/v5/persons/{person_id}/steps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v5/persons/{person_id}/steps"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.extole.io/v5/persons/{person_id}/steps")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"campaign_id": "<string>",
"cause_event_id": "<string>",
"container": "<string>",
"created_date": "2025-10-24T02:00:00-07:00",
"data": {},
"event_date": "2025-10-24T02:00:00-07:00",
"event_id": "<string>",
"id": "<string>",
"is_primary": true,
"journey_key": {
"name": "<string>",
"value": "<string>"
},
"journey_name": "<string>",
"name": "<string>",
"program": "<string>",
"quality": "HIGH",
"root_event_id": "<string>",
"scope": "CLIENT",
"updated_date": "2025-10-24T02:00:00-07:00"
}
]List person steps
Returns campaign flow steps for the specified person, sorted by event date in descending order. Steps represent discrete tracked actions (e.g. conversion, share, reward earned) within the person’s journey.
curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/steps \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/steps"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v5/persons/{person_id}/steps', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.extole.io/v5/persons/{person_id}/steps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v5/persons/{person_id}/steps"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.extole.io/v5/persons/{person_id}/steps")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"campaign_id": "<string>",
"cause_event_id": "<string>",
"container": "<string>",
"created_date": "2025-10-24T02:00:00-07:00",
"data": {},
"event_date": "2025-10-24T02:00:00-07:00",
"event_id": "<string>",
"id": "<string>",
"is_primary": true,
"journey_key": {
"name": "<string>",
"value": "<string>"
},
"journey_name": "<string>",
"name": "<string>",
"program": "<string>",
"quality": "HIGH",
"root_event_id": "<string>",
"scope": "CLIENT",
"updated_date": "2025-10-24T02:00:00-07:00"
}
]Authorizations
Path Parameters
The Extole unique profile identifier of this user at Extole.
Query Parameters
Optional step name filter. Will include steps that match at least one of the names.
Optional container filter, defaults to all containers. Will include steps that match at least one of the containers.
Optional campaign id filter. Will include steps that match at least one of the campaign ids.
Optional program label filter. Will include steps that match at least one of the programs.
Optional journey names filter. Will include steps that match at least one of the journey names.
Optional filter for primary steps. Defaults to all steps.
Optional filter for existence of a specific data keys with non-empty values. Will include steps that have at least one of the data keys.
Optional event IDs filter. Will include steps that match at least one of the event IDs.
Optional cause event IDs filter. Will include steps that match at least one of the cause event IDs.
Optional root event IDs filter. Will include steps that match at least one of the root event IDs.
Optional offset filter, defaults to 0.
Optional limit filter, defaults to 20.
Optional journey key names filter. Will include steps, whose journey key matches one of the journey key names.
Optional journey key values filter. Will include steps that have one of the specified journey keys. Valid format is name:value.
Response
Successful response
Extole campaign id associated with this step. Absent when no campaign is linked.
Id of the direct cause event for this step.
Campaign container the step belongs to.
RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Named data parameters attached to this step.
Show child attributes
Show child attributes
RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Extole event id that triggered this step.
Extole-assigned unique identifier for this step.
Whether this is the primary (first qualifying) step for this event type in the journey.
Show child attributes
Show child attributes
Journey name associated with this step. Absent for global-scope steps.
Name of the event type that created this step (e.g. purchase, signup).
Program key associated with this step. Absent when no program context exists.
Quality classification of the step (HIGH, LOW, or NONE).
HIGH, LOW, NONE Id of the root event that initiated the chain leading to this step.
Scope of the step (PUBLIC, PRIVATE, or CLIENT).
CLIENT, PRIVATE, PUBLIC RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Was this page helpful?
