Get Drilldown
curl --request GET \
--url https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown', 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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown",
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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown"
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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown")
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{
"runs": [
{
"workflow_run_id": 123,
"workflow_id": 123,
"started_at": "2023-11-07T05:31:56Z",
"disposition": "<string>"
}
],
"next_cursor": "<string>",
"total_estimate": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Post-Call Variables
Drill Down to Runs
Cursor-paginated list of the individual runs behind a chart value or histogram bucket.
GET
/
api
/
v1
/
analytics
/
post-call-variables
/
drilldown
Get Drilldown
curl --request GET \
--url https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown', 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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown",
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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown"
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.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown")
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{
"runs": [
{
"workflow_run_id": 123,
"workflow_id": 123,
"started_at": "2023-11-07T05:31:56Z",
"disposition": "<string>"
}
],
"next_cursor": "<string>",
"total_estimate": 0
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Return the individual workflow runs whose extracted field matches a discrete value or numeric range. Cursor-paginated so a UI can page through drill-down results without re-fetching the aggregate.
GET /api/v1/analytics/post-call-variables/drilldown
Query parameters
string
required
Comma-separated workflow ids.
string
required
Field name defined on every requested workflow.
string
Exact-match value.
boolean:"true","false","null", or"error".selector: the option label (e.g."price").text: the exact extracted value.
value_min / value_max pair.number
Inclusive lower bound for
number fields. Must be paired with value_max.number
Inclusive upper bound for
number fields. Must be paired with value_min.string (ISO 8601)
Start of the window (inclusive). Defaults to
to - 30 days.string (ISO 8601)
End of the window (exclusive). Defaults to now.
integer
default:"50"
Page size, 1тАУ500.
string
Opaque URL-safe base64 cursor returned by the previous pageтАЩs
next_cursor. Omit to fetch the first page.Call-attribute filters
All optional; see Overview тЖТ Call-attribute filters.string
string
string
string
boolean
boolean
boolean
string
Response
string | null
Opaque cursor for the next page, or
null when the last page has been reached.integer
Coarse count of matching runs across the window. Use for a UI hint, not for exact pagination math.
Example тАФ discrete value
cURL
curl "https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown?workflow_ids=42&field_name=cancel_reason&value=price&from=2026-07-01T00:00:00Z&to=2026-08-01T00:00:00Z&limit=50" \
-H "X-API-Key: $PEACHDESK_API_KEY"
Response
{
"runs": [
{
"workflow_run_id": 8801,
"workflow_id": 42,
"started_at": "2026-07-31T14:22:11Z",
"disposition": "resolved"
},
{
"workflow_run_id": 8763,
"workflow_id": 42,
"started_at": "2026-07-31T13:04:52Z",
"disposition": "callback_scheduled"
}
],
"next_cursor": "eyJvIjo1MH0",
"total_estimate": 47
}
Example тАФ numeric range
cURL
curl "https://api.peachdeskai.com/api/v1/analytics/post-call-variables/drilldown?workflow_ids=42&field_name=quoted_amount&value_min=200&value_max=300&limit=50" \
-H "X-API-Key: $PEACHDESK_API_KEY"
Errors
| Status | When |
|---|---|
400 | Neither value nor a full value_min+value_max pair supplied. |
400 | Unknown field_name, or value used against a non-matching field type. |
400 | from > to, invalid cursor, or bad limit. |
404 | Any workflow_id does not belong to the callerтАЩs organization. |
See also
- The drill-down URL emitted by the extraction charts uses these params as query-string keys on
/organizations/usage/runs(post_call_field,post_call_value,post_call_value_min,post_call_value_max) so a chart click lands on the runs list. See List runs with usage.
Authorizations
SessionAuthApiKeyAuth
Interactive user session: the login JWT, sent as Authorization: Bearer <token>.
Query Parameters
Required range:
1 <= x <= 500
