List conversations
curl --request GET \
--url https://connect.tryverso.ai/api/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://connect.tryverso.ai/api/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://connect.tryverso.ai/api/conversations', 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://connect.tryverso.ai/api/conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://connect.tryverso.ai/api/conversations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://connect.tryverso.ai/api/conversations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.tryverso.ai/api/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"conversations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "68d9c2a1-3f0e-8005-b2c1-7e2f0d1a9b3c",
"title": "Help me build a REST API",
"update_time": "2023-11-07T05:31:56Z",
"payload": {
"title": "<string>",
"messages": [
{
"role": "user",
"content": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"id": "<string>",
"contentType": "<string>",
"status": "<string>",
"endTurn": true,
"model": "gpt-4o",
"attachments": [
{
"type": "<string>",
"asset_pointer": "<string>",
"name": "<string>",
"size_bytes": 123,
"width": 123,
"height": 123,
"storage_path": "<string>",
"metadata": {}
}
],
"contentReferences": [
{
"type": "<string>",
"matched_text": "<string>",
"safe_urls": [
"<string>"
],
"alt": "<string>",
"name": "<string>",
"start_idx": 123,
"end_idx": 123
}
]
}
]
},
"ads": [
{
"messageId": "5882cd12-a1e6-4a82-9842-a3146f9e7262",
"adId": "06af3c16-b8df-7e62-8000-d557ca1764a8:2",
"placement": "conversational_bottom",
"visibility": "allowed",
"type": "single_advertiser_ad_unit",
"advertiser": {
"id": "adacct_6aa3f3825760819e8d6230218a087103",
"name": "Acme Audio",
"url": "https://www.acme-audio.example/?utm_source=chatgpt.com"
},
"preamble": "To compare noise-cancelling headphones under $300, here is an option.",
"cards": [
{
"title": "Noise-cancelling headphones",
"body": "Over-ear and in-ear models, free returns.",
"url": "https://www.acme-audio.example/headphones?utm_source=chatgpt.com",
"imageUrl": "https://images.openai.com/…"
}
],
"firstSeenAt": "2023-11-07T05:31:56Z"
}
],
"adImpressions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurredAt": "2023-11-07T05:31:56Z",
"action": "viewed",
"adId": "06af3c16-b8df-7e62-8000-d557ca1764a8",
"advertiser": {
"id": "adacct_6aa3f3825760819e8d6230218a087103",
"name": "Acme Audio",
"url": "https://www.acme-audio.example"
},
"title": "Noise-cancelling headphones",
"body": "Over-ear and in-ear models, free returns.",
"url": "https://www.acme-audio.example/headphones?utm_source=chatgpt.com",
"imageUrl": "https://images.openai.com/…",
"messageId": "5882cd12-a1e6-4a82-9842-a3146f9e7262"
}
]
}
],
"total": 142,
"limit": 50,
"offset": 0
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}Endpoints
List conversations
Returns the imported conversations of one connection, newest update
first, paginated with limit and offset. Each conversation carries
its normalized payload (title and messages), the ads ChatGPT
showed in it and the adImpressions matched to it.
Conversations are ordered by update_time, so a conversation the user
continues moves back to the top of the list.
Deprecated: passing userRef instead of connectionId returns the
user status object. Use GET /api/connections for that.
GET
/
api
/
conversations
List conversations
curl --request GET \
--url https://connect.tryverso.ai/api/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://connect.tryverso.ai/api/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://connect.tryverso.ai/api/conversations', 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://connect.tryverso.ai/api/conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://connect.tryverso.ai/api/conversations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://connect.tryverso.ai/api/conversations")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.tryverso.ai/api/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"conversations": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "68d9c2a1-3f0e-8005-b2c1-7e2f0d1a9b3c",
"title": "Help me build a REST API",
"update_time": "2023-11-07T05:31:56Z",
"payload": {
"title": "<string>",
"messages": [
{
"role": "user",
"content": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"id": "<string>",
"contentType": "<string>",
"status": "<string>",
"endTurn": true,
"model": "gpt-4o",
"attachments": [
{
"type": "<string>",
"asset_pointer": "<string>",
"name": "<string>",
"size_bytes": 123,
"width": 123,
"height": 123,
"storage_path": "<string>",
"metadata": {}
}
],
"contentReferences": [
{
"type": "<string>",
"matched_text": "<string>",
"safe_urls": [
"<string>"
],
"alt": "<string>",
"name": "<string>",
"start_idx": 123,
"end_idx": 123
}
]
}
]
},
"ads": [
{
"messageId": "5882cd12-a1e6-4a82-9842-a3146f9e7262",
"adId": "06af3c16-b8df-7e62-8000-d557ca1764a8:2",
"placement": "conversational_bottom",
"visibility": "allowed",
"type": "single_advertiser_ad_unit",
"advertiser": {
"id": "adacct_6aa3f3825760819e8d6230218a087103",
"name": "Acme Audio",
"url": "https://www.acme-audio.example/?utm_source=chatgpt.com"
},
"preamble": "To compare noise-cancelling headphones under $300, here is an option.",
"cards": [
{
"title": "Noise-cancelling headphones",
"body": "Over-ear and in-ear models, free returns.",
"url": "https://www.acme-audio.example/headphones?utm_source=chatgpt.com",
"imageUrl": "https://images.openai.com/…"
}
],
"firstSeenAt": "2023-11-07T05:31:56Z"
}
],
"adImpressions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurredAt": "2023-11-07T05:31:56Z",
"action": "viewed",
"adId": "06af3c16-b8df-7e62-8000-d557ca1764a8",
"advertiser": {
"id": "adacct_6aa3f3825760819e8d6230218a087103",
"name": "Acme Audio",
"url": "https://www.acme-audio.example"
},
"title": "Noise-cancelling headphones",
"body": "Over-ear and in-ear models, free returns.",
"url": "https://www.acme-audio.example/headphones?utm_source=chatgpt.com",
"imageUrl": "https://images.openai.com/…",
"messageId": "5882cd12-a1e6-4a82-9842-a3146f9e7262"
}
]
}
],
"total": 142,
"limit": 50,
"offset": 0
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}{
"error": "Connection not found"
}Authorizations
Your API key (vsk_…), issued at onboarding. Keep it server-side.
Query Parameters
Connection UUID, from GET /api/connections or the connection.created webhook.
Page size. Values above 100 are capped to 100.
Required range:
1 <= x <= 100Number of conversations to skip.
Required range:
x >= 0