curl --request GET \
--url https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions', 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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions",
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: Bearer <token>"
],
]);
$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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"customer_interactions": [
{
"id": "abc123",
"teammate": {
"id": "teammate123",
"email": "[email protected]"
},
"summary": "Customer called about a billing discrepancy on their March invoice. Agent confirmed a duplicate charge, issued a refund, and the customer was satisfied.",
"last_recorded_at": "2026-10-21T15:42:10.123Z",
"data_extraction_fields": [
{
"key": "customer_satisfaction_score",
"name": "Customer Satisfaction Score",
"type": "number",
"value": 4.5
},
{
"key": "issue_resolved",
"name": "Issue Resolved",
"type": "boolean",
"value": true
}
],
"account": {
"id": "account123",
"ext_id": "ext_account_456"
},
"contacts": [
{
"id": "contact123",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"phone_number": "+1234567890",
"ext_id": "ext_contact_789",
"custom_fields": [
{
"key": "preferred_contact_method",
"name": "Preferred Contact Method",
"type": "text",
"value": "email"
}
]
}
]
}
]
},
"next_cursor": null
}{
"error": 123,
"message": "<string>"
}{
"error": 123,
"message": "<string>"
}List Playbook Customer Interactions
Returns a list of customer interactions for the playbook, ordered with the most recent first by last_recorded_at (when its most recent recording took place). Results are paginated using a cursor with a fixed page size of 50; there is no limit parameter. Pass the next_cursor returned by a previous response as the cursor query parameter to fetch the next page. When next_cursor is null, there are no more results.
Pass include_analysis=true to additionally return the analysis (the section-by-section assessment of the interaction against its playbook) and outcome fields for each customer interaction. These are omitted by default.
Pass start_date, end_date or both to only return customer interactions whose last_recorded_at is in the half-open range start_date <= last_recorded_at < end_date. Omitting either leaves that side unbounded. To page through a filtered list, send the same start_date and end_date with every cursor.
curl --request GET \
--url https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions', 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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions",
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: Bearer <token>"
],
]);
$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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.alpharun.com/api/v1/playbooks/{PLAYBOOK_ID}/customer-interactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"customer_interactions": [
{
"id": "abc123",
"teammate": {
"id": "teammate123",
"email": "[email protected]"
},
"summary": "Customer called about a billing discrepancy on their March invoice. Agent confirmed a duplicate charge, issued a refund, and the customer was satisfied.",
"last_recorded_at": "2026-10-21T15:42:10.123Z",
"data_extraction_fields": [
{
"key": "customer_satisfaction_score",
"name": "Customer Satisfaction Score",
"type": "number",
"value": 4.5
},
{
"key": "issue_resolved",
"name": "Issue Resolved",
"type": "boolean",
"value": true
}
],
"account": {
"id": "account123",
"ext_id": "ext_account_456"
},
"contacts": [
{
"id": "contact123",
"first_name": "John",
"last_name": "Doe",
"email": "[email protected]",
"phone_number": "+1234567890",
"ext_id": "ext_contact_789",
"custom_fields": [
{
"key": "preferred_contact_method",
"name": "Preferred Contact Method",
"type": "text",
"value": "email"
}
]
}
]
}
]
},
"next_cursor": null
}{
"error": 123,
"message": "<string>"
}{
"error": 123,
"message": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the playbook whose customer interactions to list.
Query Parameters
When true, include the analysis and outcome fields in each customer interaction. Defaults to false, in which case both fields are omitted.
Pagination cursor returned as next_cursor in a previous response. Omit on the first request.
Inclusive lower bound: only return customer interactions whose last_recorded_at is at or after this time. An ISO 8601 date or date-time, e.g. 2026-10-01 or 2026-10-01T09:00:00-07:00. A value without an offset is interpreted as UTC.
Exclusive upper bound: only return customer interactions whose last_recorded_at is before this time. An ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T09:00:00-07:00. A value without an offset is interpreted as UTC, so start_date=2026-10-01&end_date=2026-11-01 covers October 2026 in UTC.