Submit Message Feedback
Available for: Chatflow, Chatbot, Legacy Agent, Text Generator apps.
Records a like or dislike rating, plus an optional comment, on a message. Submitting null for rating revokes the message’s existing feedback.
curl --request POST \
--url https://{api_base_url}/messages/{message_id}/feedbacks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "This answer was very helpful!",
"rating": "like",
"user": "abc-123"
}
'import requests
url = "https://{api_base_url}/messages/{message_id}/feedbacks"
payload = {
"content": "This answer was very helpful!",
"rating": "like",
"user": "abc-123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: 'This answer was very helpful!', rating: 'like', user: 'abc-123'})
};
fetch('https://{api_base_url}/messages/{message_id}/feedbacks', 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_base_url}/messages/{message_id}/feedbacks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'This answer was very helpful!',
'rating' => 'like',
'user' => 'abc-123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{api_base_url}/messages/{message_id}/feedbacks"
payload := strings.NewReader("{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{api_base_url}/messages/{message_id}/feedbacks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/messages/{message_id}/feedbacks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}"
response = http.request(request)
puts response.read_body{
"result": "success"
}{
"code": "invalid_param",
"message": "Arg user must be provided.",
"status": 400
}{
"code": "not_found",
"message": "Message Not Exists.",
"status": 404
}Authorizations
Every request authenticates with an API key: Authorization: Bearer {API_KEY}. App endpoints take an app API key; knowledge endpoints take a knowledge base API key (Get Started).
Keep keys server-side; never embed them in client code. Requests with a missing or invalid key fail with HTTP 401 (unauthorized).
Path Parameters
ID of the message to give feedback on. Get message IDs from List Conversation Messages.
Body
Request body for submitting message feedback.
End-user identifier, defined by your app and unique within it. Must match the user that received the message, since feedback is scoped to that end user. See End User Identity.
Optional text feedback providing additional detail.
Feedback rating. Set to null to revoke previously submitted feedback.
like, dislike, null Response
Operation successful.
Operation result. Always success.
Was this page helpful?
curl --request POST \
--url https://{api_base_url}/messages/{message_id}/feedbacks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content": "This answer was very helpful!",
"rating": "like",
"user": "abc-123"
}
'import requests
url = "https://{api_base_url}/messages/{message_id}/feedbacks"
payload = {
"content": "This answer was very helpful!",
"rating": "like",
"user": "abc-123"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({content: 'This answer was very helpful!', rating: 'like', user: 'abc-123'})
};
fetch('https://{api_base_url}/messages/{message_id}/feedbacks', 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_base_url}/messages/{message_id}/feedbacks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content' => 'This answer was very helpful!',
'rating' => 'like',
'user' => 'abc-123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{api_base_url}/messages/{message_id}/feedbacks"
payload := strings.NewReader("{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{api_base_url}/messages/{message_id}/feedbacks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/messages/{message_id}/feedbacks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"This answer was very helpful!\",\n \"rating\": \"like\",\n \"user\": \"abc-123\"\n}"
response = http.request(request)
puts response.read_body{
"result": "success"
}{
"code": "invalid_param",
"message": "Arg user must be provided.",
"status": 400
}{
"code": "not_found",
"message": "Message Not Exists.",
"status": 404
}