List Canvas Interactions
curl --request GET \
--url https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://tavusapi.com/v2/conversations/{conversation_id}/canvas/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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"conversation_id": "c123456",
"interaction_id": "ci_call_8f2d41_submit_5e0b7c2a",
"tool_call_id": "call_8f2d41",
"component": "canvas.question",
"component_version": "v1",
"type": "submit",
"value": {
"selected_option_ids": [
"opt_2"
],
"skipped": false
},
"metadata": {
"client": "kiosk-web"
},
"created_at": "2026-06-09T21:14:03.518923"
}
]
}{
"message": "Invalid conversation_id"
}{
"message": "Invalid access token"
}Magic Canvas
List Canvas Interactions
Returns every Canvas interaction recorded for a conversation, oldest first. Uses the same field shape as the canvas.interaction webhook’s properties object. Zero Data Retention (ZDR) conversations record no interactions, so data is an empty list.
Readable during and after the conversation. Call from your backend with your API key - not from the browser.
See Canvas interactions.
GET
/
v2
/
conversations
/
{conversation_id}
/
canvas
/
interactions
List Canvas Interactions
curl --request GET \
--url https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://tavusapi.com/v2/conversations/{conversation_id}/canvas/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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/conversations/{conversation_id}/canvas/interactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"conversation_id": "c123456",
"interaction_id": "ci_call_8f2d41_submit_5e0b7c2a",
"tool_call_id": "call_8f2d41",
"component": "canvas.question",
"component_version": "v1",
"type": "submit",
"value": {
"selected_option_ids": [
"opt_2"
],
"skipped": false
},
"metadata": {
"client": "kiosk-web"
},
"created_at": "2026-06-09T21:14:03.518923"
}
]
}{
"message": "Invalid conversation_id"
}{
"message": "Invalid access token"
}For AI agents, use
https://docs.tavus.io/openapi.yaml for the full HTTP API contract.
