Send Interaction
curl --request POST \
--url https://backend.nebuly.com/event-ingestion/api/v2/events/interactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"interaction": {
"conversation_id": "<string>",
"output": "<string>",
"time_start": "<string>",
"time_end": "<string>",
"messages": [
{}
],
"end_user": "<string>",
"rag_sources": [
"<string>"
],
"model": "<string>",
"tags": {},
"feature_flag": [
"<string>"
],
"feedback_actions": [
{}
]
},
"anonymize": true
}
'import requests
url = "https://backend.nebuly.com/event-ingestion/api/v2/events/interactions"
payload = {
"interaction": {
"conversation_id": "<string>",
"output": "<string>",
"time_start": "<string>",
"time_end": "<string>",
"messages": [{}],
"end_user": "<string>",
"rag_sources": ["<string>"],
"model": "<string>",
"tags": {},
"feature_flag": ["<string>"],
"feedback_actions": [{}]
},
"anonymize": True
}
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({
interaction: {
conversation_id: '<string>',
output: '<string>',
time_start: '<string>',
time_end: '<string>',
messages: [{}],
end_user: '<string>',
rag_sources: ['<string>'],
model: '<string>',
tags: {},
feature_flag: ['<string>'],
feedback_actions: [{}]
},
anonymize: true
})
};
fetch('https://backend.nebuly.com/event-ingestion/api/v2/events/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/event-ingestion/api/v2/events/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([
'interaction' => [
'conversation_id' => '<string>',
'output' => '<string>',
'time_start' => '<string>',
'time_end' => '<string>',
'messages' => [
[
]
],
'end_user' => '<string>',
'rag_sources' => [
'<string>'
],
'model' => '<string>',
'tags' => [
],
'feature_flag' => [
'<string>'
],
'feedback_actions' => [
[
]
]
],
'anonymize' => true
]),
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/event-ingestion/api/v2/events/interactions"
payload := strings.NewReader("{\n \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\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/event-ingestion/api/v2/events/interactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.nebuly.com/event-ingestion/api/v2/events/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 \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\n}"
response = http.request(request)
puts response.read_bodySend Interaction
POST
/
event-ingestion
/
api
/
v2
/
events
/
interactions
Send Interaction
curl --request POST \
--url https://backend.nebuly.com/event-ingestion/api/v2/events/interactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"interaction": {
"conversation_id": "<string>",
"output": "<string>",
"time_start": "<string>",
"time_end": "<string>",
"messages": [
{}
],
"end_user": "<string>",
"rag_sources": [
"<string>"
],
"model": "<string>",
"tags": {},
"feature_flag": [
"<string>"
],
"feedback_actions": [
{}
]
},
"anonymize": true
}
'import requests
url = "https://backend.nebuly.com/event-ingestion/api/v2/events/interactions"
payload = {
"interaction": {
"conversation_id": "<string>",
"output": "<string>",
"time_start": "<string>",
"time_end": "<string>",
"messages": [{}],
"end_user": "<string>",
"rag_sources": ["<string>"],
"model": "<string>",
"tags": {},
"feature_flag": ["<string>"],
"feedback_actions": [{}]
},
"anonymize": True
}
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({
interaction: {
conversation_id: '<string>',
output: '<string>',
time_start: '<string>',
time_end: '<string>',
messages: [{}],
end_user: '<string>',
rag_sources: ['<string>'],
model: '<string>',
tags: {},
feature_flag: ['<string>'],
feedback_actions: [{}]
},
anonymize: true
})
};
fetch('https://backend.nebuly.com/event-ingestion/api/v2/events/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/event-ingestion/api/v2/events/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([
'interaction' => [
'conversation_id' => '<string>',
'output' => '<string>',
'time_start' => '<string>',
'time_end' => '<string>',
'messages' => [
[
]
],
'end_user' => '<string>',
'rag_sources' => [
'<string>'
],
'model' => '<string>',
'tags' => [
],
'feature_flag' => [
'<string>'
],
'feedback_actions' => [
[
]
]
],
'anonymize' => true
]),
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/event-ingestion/api/v2/events/interactions"
payload := strings.NewReader("{\n \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\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/event-ingestion/api/v2/events/interactions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://backend.nebuly.com/event-ingestion/api/v2/events/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 \"interaction\": {\n \"conversation_id\": \"<string>\",\n \"output\": \"<string>\",\n \"time_start\": \"<string>\",\n \"time_end\": \"<string>\",\n \"messages\": [\n {}\n ],\n \"end_user\": \"<string>\",\n \"rag_sources\": [\n \"<string>\"\n ],\n \"model\": \"<string>\",\n \"tags\": {},\n \"feature_flag\": [\n \"<string>\"\n ],\n \"feedback_actions\": [\n {}\n ]\n },\n \"anonymize\": true\n}"
response = http.request(request)
puts response.read_bodyYou can use this endpoint to send a user interaction in simple AI systems. This approach is suggested for non-agentic systems, where the response of the ai system is generated in a single call to the LLM, without using any external tools or resources.
Please refer to the interaction with trace endpoint for a more comprehensive way to track interactions.
object
required
The interaction to send to the nebuly platform.
Show properties
Show properties
string
required
The conversation id of the interaction. This parameter can be used to enforce interactions to be grouped by a specific conversation.
string
required
The LLM output in the interaction (the text shown to the user as assistant response).
string
required
The start time of the call to the LLM. You can approximate this to the time when the user sends the interaction. The accepted format is the
ISO 8601.Example: 2023-12-07T15:00:00.000Zstring
required
The end time of the call to the LLM. This is when the user receives the full answer from the model. The accepted format is the
ISO 8601.Example: 2023-12-07T15:00:10.000Zarray
required
A list of messages from the conversation so far, following the same format used by OpenAI Chat Completion endpoints.Each message has two required fields:
role: the role of who is sending the message. Possible values are: system, user, assistant, tool.content: the content of the message.
"messages": [
{
"role": "system",
"content": "This is a system prompt"
},
{
"role": "user",
"content": "What's the weather like in Turin?"
},
{
"role": "assistant",
"content": "The weather is currently rainy in Turin."
},
{
"role": "user",
"content": "What's the weather like in Rome?"
}
]
string
required
An id or username uniquely identifying the end-user. We recommend hashing their username or email address, in order to avoid sending us any identifying information.
array<string>
The RAG sources used to produce the output. Note that this is an array of strings so only the name of the RAG source should be given.
If you are interested in tracking also the input-output of the RAG source please refer to the interaction with trace endpoint.
string
required
The LLM model you are using. Please note that this is needed if you want to visualize the cost of your requests. Now we support costs only for OpenAI models, cost of other providers coming soon.
dict<string, string>
Tag user interactions by adding key-value pairs using this parameter. Each key represents the tag name, and the corresponding value is the tag value.For example, if you want to tag an interaction with the model version used to reply to user input, provide it as an argument for nebuly_tags, e.g.
{"version" => "v1.0.0"}. You have the flexibility to define custom tags, making them available as potential filters on the Nebuly platform.string[]
This field is used for the AB testing feature. Please refer to its documentation for further details.
object[]
A list of feedback actions provided by the end-user during or after the interaction.Each object in the array can contain:
slug: (string) – the type of action. Accepted values include:thumbs_upthumbs_downcopy_inputcopy_outputpastecommentregenerateeditrating
text: (string, optional) – textual feedback associated with the action (if applicable).value: (number, optional) – only used for theratingaction to capture a numerical score.
"feedback_actions": [
{
"slug": "thumbs_up",
"text": "Very helpful response!"
},
{
"slug": "comment",
"text": "Can you explain more about this?"
},
{
"slug": "rating",
"value": 4,
"text": "Pretty good!"
},
{
"slug": "regenerate"
}
]
boolean
default:"true"
Boolean flag to anonymize your data
boolean
default:"false"
Boolean flag to hide the content of the interaction (input and output) in the Nebuly platform. If set to true, only metadata and traces will be visible.