List a campaign's callback requests
curl --request GET \
--url https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks', 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.upliftai.org/v1/campaigns/{campaignId}/callbacks",
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.upliftai.org/v1/campaigns/{campaignId}/callbacks"
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.upliftai.org/v1/campaigns/{campaignId}/callbacks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks")
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{
"callbacks": [
{
"callbackId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923004567890#a1#cb",
"organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"assistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"campaignId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sessionId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923004567890#a1",
"reason": "Cardholder disputes the late fee and wants an agent to go through the statement.",
"callbackAfter": "2026-08-18T11:00:00.000Z",
"status": "open",
"createdAt": "2026-08-18T06:41:19.204Z",
"updatedAt": "2026-08-18T06:41:19.204Z"
},
{
"callbackId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923218765432#a2#cb",
"organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"assistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"campaignId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sessionId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923218765432#a2",
"reason": "Asked to be called back to set up an instalment plan.",
"status": "done",
"createdAt": "2026-08-18T14:22:07.881Z",
"updatedAt": "2026-08-18T15:05:33.416Z"
}
]
}{
"message": "Invalid pagination cursor",
"error": "Bad Request",
"statusCode": 400
}{
"message": "invalid authorization",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Campaign not found: 00000000-0000-4000-8000-000000000000",
"error": "Not Found",
"statusCode": 404
}Campaign outcomes
List a campaign's callback requests
The contacts who asked to be phoned back by a person, soonest first. Post-call analysis opens these — nothing in the API creates one. Every callback comes back, the already-handled (done) alongside the still-waiting (open), and there is no status query parameter — so to build a “who still needs a call” queue, filter to open in your own code.
Note: Scores, conversions, and sentiment are computed by LLMs — best effort, with room to be wrong. We are continuously closing the tracking gaps, but for sensitive workloads we recommend running your own analysis on the transcripts delivered over webhooks.
GET
/
campaigns
/
{campaignId}
/
callbacks
List a campaign's callback requests
curl --request GET \
--url https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks', 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.upliftai.org/v1/campaigns/{campaignId}/callbacks",
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.upliftai.org/v1/campaigns/{campaignId}/callbacks"
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.upliftai.org/v1/campaigns/{campaignId}/callbacks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/campaigns/{campaignId}/callbacks")
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{
"callbacks": [
{
"callbackId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923004567890#a1#cb",
"organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"assistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"campaignId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sessionId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923004567890#a1",
"reason": "Cardholder disputes the late fee and wants an agent to go through the statement.",
"callbackAfter": "2026-08-18T11:00:00.000Z",
"status": "open",
"createdAt": "2026-08-18T06:41:19.204Z",
"updatedAt": "2026-08-18T06:41:19.204Z"
},
{
"callbackId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923218765432#a2#cb",
"organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"assistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"campaignId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"sessionId": "7d41c9e2-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923218765432#a2",
"reason": "Asked to be called back to set up an instalment plan.",
"status": "done",
"createdAt": "2026-08-18T14:22:07.881Z",
"updatedAt": "2026-08-18T15:05:33.416Z"
}
]
}{
"message": "Invalid pagination cursor",
"error": "Bad Request",
"statusCode": 400
}{
"message": "invalid authorization",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Campaign not found: 00000000-0000-4000-8000-000000000000",
"error": "Not Found",
"statusCode": 404
}Authorizations
Project API key (sk_api_…).
Path Parameters
Query Parameters
Rows per page. Larger values are clamped to 100.
Required range:
x >= 1The nextCursor returned by the previous page.
