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.
Filters you can use to get data based only on the interactions you are interested in.
Show properties
Show properties
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
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.
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".Parameter needed for pagination. It indicates the number of rows per page.
Parameter needed for pagination. It indicates the offset to be applied to the first rows returned.
Response
Needed for pagination. The total number of rows available.
Needed for pagination. It indicates the offset to be applied to the first rows returned.
Needed for pagination. It indicates the number of rows per page.
The data per interaction.
Show properties
Show properties
The interaction id. It uniquely identifies the interaction and can be used to retrieve further information.
The input text written by the user.
The response generated by the assistant.
A detailed version of the user intent in a single sentence.
The end user interacting with the LLM.
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.
The date when the user input was received by the LLM.
The date when the assistant response was sent back to the user.
Description of any warnings or issues detected with the LLM response.
If present, it indicates that the user is having a negative experience withing the conversation.
Cost of the interaction, in microdollars.
Time elapsed between the user input and the assistant response, in seconds.
Language detected in the user input.
Number of characters in the output.
Indicates whether PII was removed from the interaction.
Text content accompanying feedback actions, if any.
Numerical rating provided as feedback (e.g., 1–5).
Actions taken or suggested via user feedback (e.g., “thumbs_up”, “thumbs_down”).
Sentiment classification of the interaction, if available (e.g., positive, neutral, negative).
List of detected emotions from the user input.
Key-value pairs showing custom tags associated with the interaction.
Key-value pairs showing custom columns associated with the interaction defined inside the platform.
Key-value pairs of manually defined aggregates associated with the interaction defined inside the platform.
Detailed metadata about each RAG item (e.g., source, query, result).
⌘I