List Feedback
curl --request GET \
--url https://api.usesimple.ai/api/v1/feedback \
--header 'Authorization: <api-key>'import requests
url = "https://api.usesimple.ai/api/v1/feedback"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.usesimple.ai/api/v1/feedback', 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.usesimple.ai/api/v1/feedback",
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.usesimple.ai/api/v1/feedback"
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.usesimple.ai/api/v1/feedback")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/feedback")
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{
"feedback": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transcript_entry_id": "<string>",
"feedback_text": "<string>",
"resolved": true,
"created_at": "2023-11-07T05:31:56Z",
"notes": [
{
"note_text": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"author_name": "<string>"
}
],
"call_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"category": "wrong_action",
"priority": "critical",
"utterance_text": "<string>",
"utterance_role": "<string>",
"corrected_response": "<string>",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_name": "<string>",
"node_name": "<string>",
"resolved_at": "2023-11-07T05:31:56Z",
"submitted_by": {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
}
],
"total_count": 123,
"page": 123,
"page_size": 123,
"total_pages": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Feedback
List Call Transcript Feedback with the API
List feedback submitted on Simple AI call transcripts so your organization can review reported issues and track their resolution.
GET
/
feedback
List Feedback
curl --request GET \
--url https://api.usesimple.ai/api/v1/feedback \
--header 'Authorization: <api-key>'import requests
url = "https://api.usesimple.ai/api/v1/feedback"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.usesimple.ai/api/v1/feedback', 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.usesimple.ai/api/v1/feedback",
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.usesimple.ai/api/v1/feedback"
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.usesimple.ai/api/v1/feedback")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usesimple.ai/api/v1/feedback")
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{
"feedback": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transcript_entry_id": "<string>",
"feedback_text": "<string>",
"resolved": true,
"created_at": "2023-11-07T05:31:56Z",
"notes": [
{
"note_text": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"author_name": "<string>"
}
],
"call_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"category": "wrong_action",
"priority": "critical",
"utterance_text": "<string>",
"utterance_role": "<string>",
"corrected_response": "<string>",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_name": "<string>",
"node_name": "<string>",
"resolved_at": "2023-11-07T05:31:56Z",
"submitted_by": {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
}
],
"total_count": 123,
"page": 123,
"page_size": 123,
"total_pages": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}See the AI phone calls guide for an overview of the transcripts and analysis produced for completed calls.
Feedback created before these categories were introduced was remapped:
Priority
Reviewers can assign a priority when they leave feedback:critical, high, medium, or low. Feedback left without a priority is returned with priority: null. Filter with the priority query parameter, and pass priority=unspecified to list only feedback that has no priority yet.
Categories
Every feedback entry is categorized automatically when it is created (reviewers can also pick a category up front). The first five describe agent behavior (fixable in the prompt or configuration), the next three are platform or data failures, and the last two are meta.| Category | Meaning |
|---|---|
wrong_action | Performed an action the customer did not ask for, or the right action with the wrong target or scope: wrong record updated, wrong option selected, a booking, refund, or claim with the wrong scope or reason. |
skipped_verification | Did not collect or confirm information the flow requires before acting: identity, contact details, addresses, dates and times, quantities, a readback before submitting. |
incorrect_information | Stated something untrue or unsupported, or could not find the right answer: pricing, availability, policy, account or product facts, knowledge-base content, an unrelated substitute offered. |
transfer_handling | Transferred when it should not have, failed to transfer when it should have, promised a handoff that never happened, or offered one outside business hours. |
conversation_quality | The exchange itself was off: answered a different question than asked, ignored what the customer said, looped or repeated itself, duplicate offers, clumsy readbacks, wrong tone. |
data_integration | What the agent confirmed did not land correctly in the connected system, or the system returned wrong customer, order, appointment, or account data. |
transcription_error | Speech-to-text misheard the customer (names, numbers, terms, garbled text), or text-to-speech mispronounced something. |
interruption_handling | Cut the customer off, talked over them, did not wait for an answer, left dead air, or stalled for a long time while waiting on a tool. |
tag_error | One or more tags were incorrectly added to the interaction, or expected tags were not added. |
other | Does not fit the above categories, or does not describe a reportable agent behavior. |
wrong_response became wrong_action, hallucination became incorrect_information, and tone and missed_intent became conversation_quality. transcription_error, tag_error, and other are unchanged. The category filter still accepts those retired values and treats them as their replacements, so existing integrations keep working.Authorizations
Query Parameters
Page number for pagination
Number of feedback entries per page (max 100)
Required range:
x <= 100Filter by feedback category. See the List Feedback guide for what each category means.
Available options:
wrong_action, skipped_verification, incorrect_information, transfer_handling, conversation_quality, data_integration, transcription_error, interruption_handling, tag_error, other Filter by reviewer-assigned priority. Use unspecified for feedback that has no priority.
Available options:
critical, high, medium, low, unspecified Filter by agent UUID
Filter by call UUID
Filter by resolved state (true = marked as fixed, false = open)
Filter feedback created at or after this datetime (ISO 8601 format)
Filter feedback created at or before this datetime (ISO 8601 format)
Last modified on September 9, 2026