Get Interactions
curl --request POST \
--url https://backend.nebuly.com/api/external/get-interactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"time_range": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"kind": "<string>",
"tag": "<string>",
"values": [
"<string>"
]
}
],
"limit": 123,
"offset": 123
}
'import requests
url = "https://backend.nebuly.com/api/external/get-interactions"
payload = {
"time_range": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"kind": "<string>",
"tag": "<string>",
"values": ["<string>"]
}
],
"limit": 123,
"offset": 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({
time_range: {start: '<string>', end: '<string>'},
filters: [{kind: '<string>', tag: '<string>', values: ['<string>']}],
limit: 123,
offset: 123
})
};
fetch('https://backend.nebuly.com/api/external/get-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://backend.nebuly.com/api/external/get-interactions",
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([
'time_range' => [
'start' => '<string>',
'end' => '<string>'
],
'filters' => [
[
'kind' => '<string>',
'tag' => '<string>',
'values' => [
'<string>'
]
]
],
'limit' => 123,
'offset' => 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://backend.nebuly.com/api/external/get-interactions"
payload := strings.NewReader("{\n \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 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://backend.nebuly.com/api/external/get-interactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.nebuly.com/api/external/get-interactions")
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 \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 123\n}"
response = http.request(request)
puts response.read_body{
"total": 123,
"offset": 123,
"limit": 123,
"data": [
{
"id": "<string>",
"input_text": "<string>",
"output_text": "<string>",
"user_query": "<string>",
"end_user": "<string>",
"conversation_id": "<string>",
"timestamp": "<string>",
"end_timestamp": "<string>",
"warning_message_v2": "<string>",
"negative_intent_message_v2": "<string>",
"cost": 123,
"latency": 123,
"text_language": "<string>",
"verbosity": 123,
"pii_removed": true,
"feedback_action_text": "<string>",
"feedback_action_rating": 123,
"feedback_actions": [
"<string>"
],
"sentiment": "<string>",
"emotions": [
"<string>"
],
"tags": {},
"custom_columns": {},
"custom_aggregates": {},
"rag_details": {}
}
]
}Insights API
Get Interactions
POST
/
api
/
external
/
get-interactions
Get Interactions
curl --request POST \
--url https://backend.nebuly.com/api/external/get-interactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"time_range": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"kind": "<string>",
"tag": "<string>",
"values": [
"<string>"
]
}
],
"limit": 123,
"offset": 123
}
'import requests
url = "https://backend.nebuly.com/api/external/get-interactions"
payload = {
"time_range": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"kind": "<string>",
"tag": "<string>",
"values": ["<string>"]
}
],
"limit": 123,
"offset": 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({
time_range: {start: '<string>', end: '<string>'},
filters: [{kind: '<string>', tag: '<string>', values: ['<string>']}],
limit: 123,
offset: 123
})
};
fetch('https://backend.nebuly.com/api/external/get-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://backend.nebuly.com/api/external/get-interactions",
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([
'time_range' => [
'start' => '<string>',
'end' => '<string>'
],
'filters' => [
[
'kind' => '<string>',
'tag' => '<string>',
'values' => [
'<string>'
]
]
],
'limit' => 123,
'offset' => 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://backend.nebuly.com/api/external/get-interactions"
payload := strings.NewReader("{\n \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 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://backend.nebuly.com/api/external/get-interactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.nebuly.com/api/external/get-interactions")
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 \"time_range\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"kind\": \"<string>\",\n \"tag\": \"<string>\",\n \"values\": [\n \"<string>\"\n ]\n }\n ],\n \"limit\": 123,\n \"offset\": 123\n}"
response = http.request(request)
puts response.read_body{
"total": 123,
"offset": 123,
"limit": 123,
"data": [
{
"id": "<string>",
"input_text": "<string>",
"output_text": "<string>",
"user_query": "<string>",
"end_user": "<string>",
"conversation_id": "<string>",
"timestamp": "<string>",
"end_timestamp": "<string>",
"warning_message_v2": "<string>",
"negative_intent_message_v2": "<string>",
"cost": 123,
"latency": 123,
"text_language": "<string>",
"verbosity": 123,
"pii_removed": true,
"feedback_action_text": "<string>",
"feedback_action_rating": 123,
"feedback_actions": [
"<string>"
],
"sentiment": "<string>",
"emotions": [
"<string>"
],
"tags": {},
"custom_columns": {},
"custom_aggregates": {},
"rag_details": {}
}
]
}You need an API key to authenticate. See here for more information about the API keys.
object
required
object[]
required
Filters you can use to get data based only on the interactions you are interested in.
Show properties
Show properties
string
required
The filter kind. It can be one of the following values:
- user_intent
- negative_user_intent
- keyword
- user_feedback
- tag
- type_of_problem
- topic
- user
- user_query
string
Optional field to be used only when the kind is tag. It should specify the tag name, which is the same as the key you used in the tags dictionary during the interaction submission.
string[]
required
The values of the selected filter you want to filter on. Note that all the values passed in
the list are considered to be in “or” the one with the other. This means that if the kind is
“topic” and the passed values are “value A”, “value B”, this is equal to
topic="value A" or topic="value B".integer
required
Parameter needed for pagination. It indicates the number of rows per page.
integer
required
Parameter needed for pagination. It indicates the offset to be applied to the first rows returned.
Response
integer
Needed for pagination. The total number of rows available.
integer
Needed for pagination. It indicates the offset to be applied to the first rows returned.
integer
Needed for pagination. It indicates the number of rows per page.
object[]
The data per interaction.
Show properties
Show properties
string
The interaction id. It uniquely identifies the interaction and can be used to retrieve further information.
string
The input text written by the user.
string
The response generated by the assistant.
string
A detailed version of the user intent in a single sentence.
string
The end user interacting with the LLM.
string
The conversation id. It uniquely identifies the conversation the interaction belongs to.
This information can be sent via API in order to group interactions, otherwise it will be generated automatically by Nebuly.
string
The date when the user input was received by the LLM.
string
The date when the assistant response was sent back to the user.
string
Description of any warnings or issues detected with the LLM response.
string
If present, it indicates that the user is having a negative experience withing the conversation.
float
Cost of the interaction, in microdollars.
float
Time elapsed between the user input and the assistant response, in seconds.
string
Language detected in the user input.
integer
Number of characters in the output.
boolean
Indicates whether PII was removed from the interaction.
string
Text content accompanying feedback actions, if any.
number
Numerical rating provided as feedback (e.g., 1–5).
string[]
Actions taken or suggested via user feedback (e.g., “thumbs_up”, “thumbs_down”).
string
Sentiment classification of the interaction, if available (e.g., positive, neutral, negative).
string[]
List of detected emotions from the user input.
object
Key-value pairs showing custom tags associated with the interaction.
object
Key-value pairs showing custom columns associated with the interaction defined inside the platform.
object
Key-value pairs of manually defined aggregates associated with the interaction defined inside the platform.
object
Detailed metadata about each RAG item (e.g., source, query, result).
⌘I