Tickets
List tickets and escalations
Discover durable work across the connected workspace, including legacy reviews. Filter and paginate rather than reading every conversation. Counts are work items, independent of unread and needsReply. Read get_ticket and lifecycle events before deciding an action; conversation/message evidence requires its existing scopes. Follow all pages with unchanged filters. Lists are live, not frozen snapshots.
GET
/
tickets
List tickets and escalations
curl --request GET \
--url https://platform-api.visitoai.com/m2m/v1/tickets \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform-api.visitoai.com/m2m/v1/tickets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform-api.visitoai.com/m2m/v1/tickets', 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://platform-api.visitoai.com/m2m/v1/tickets",
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://platform-api.visitoai.com/m2m/v1/tickets"
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://platform-api.visitoai.com/m2m/v1/tickets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.visitoai.com/m2m/v1/tickets")
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{
"tickets": [
{
"ticketId": "<string>",
"tenantId": "<string>",
"conversationId": "<string>",
"type": "ticket",
"status": "pending",
"title": "<string>",
"description": "<string>",
"revision": 1,
"channel": "<string>",
"contextStatus": "available",
"contact": {
"displayName": "<string>",
"avatarUrl": "<string>"
},
"createdAt": "<string>",
"updatedAt": "<string>",
"source": {
"kind": "manual",
"messageId": "<string>",
"eventId": "<string>"
},
"permittedActions": [
"update"
],
"business": {
"propertyId": "<string>",
"name": "<string>"
},
"assignee": {
"operatorId": "<string>",
"name": "<string>"
},
"resolvedAt": "<string>",
"escalation": {
"reasonCode": "<string>",
"returnsToAiOnResolve": true,
"ownershipActive": true,
"capturedFields": {},
"missingFields": [
"<string>"
],
"knowledgeGap": {
"contextStatus": "available",
"schemaVersion": "1.0",
"category": "<string>",
"sourceCount": 4503599627370495,
"sourceTitles": [
"<string>"
],
"importance": "<string>",
"confidence": "high",
"receiptStatus": "available",
"receipt": {
"receiptId": "<string>",
"reportedAt": "2023-11-07T05:31:56Z",
"behavior": "report_only",
"disposition": "reported"
}
}
}
}
],
"counts": {
"pending": 1,
"in_progress": 1,
"resolved": 1,
"cancelled": 1
},
"hasMore": true,
"nextCursor": "<string>",
"asOf": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Server-side tenant-scoped credential created from Build > API Keys.
Query Parameters
Required range:
1 <= x <= 100Continue with nextCursor and unchanged filters. The list is live; updated items can move between pages.
Maximum string length:
4000Available options:
pending, in_progress, resolved, cancelled Available options:
ticket, escalation all, unassigned, or an active human operator ID. Agents cannot use mine.
Available options:
whatsapp, instagram, messenger, webchat ⌘I
List tickets and escalations
curl --request GET \
--url https://platform-api.visitoai.com/m2m/v1/tickets \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform-api.visitoai.com/m2m/v1/tickets"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform-api.visitoai.com/m2m/v1/tickets', 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://platform-api.visitoai.com/m2m/v1/tickets",
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://platform-api.visitoai.com/m2m/v1/tickets"
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://platform-api.visitoai.com/m2m/v1/tickets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform-api.visitoai.com/m2m/v1/tickets")
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{
"tickets": [
{
"ticketId": "<string>",
"tenantId": "<string>",
"conversationId": "<string>",
"type": "ticket",
"status": "pending",
"title": "<string>",
"description": "<string>",
"revision": 1,
"channel": "<string>",
"contextStatus": "available",
"contact": {
"displayName": "<string>",
"avatarUrl": "<string>"
},
"createdAt": "<string>",
"updatedAt": "<string>",
"source": {
"kind": "manual",
"messageId": "<string>",
"eventId": "<string>"
},
"permittedActions": [
"update"
],
"business": {
"propertyId": "<string>",
"name": "<string>"
},
"assignee": {
"operatorId": "<string>",
"name": "<string>"
},
"resolvedAt": "<string>",
"escalation": {
"reasonCode": "<string>",
"returnsToAiOnResolve": true,
"ownershipActive": true,
"capturedFields": {},
"missingFields": [
"<string>"
],
"knowledgeGap": {
"contextStatus": "available",
"schemaVersion": "1.0",
"category": "<string>",
"sourceCount": 4503599627370495,
"sourceTitles": [
"<string>"
],
"importance": "<string>",
"confidence": "high",
"receiptStatus": "available",
"receipt": {
"receiptId": "<string>",
"reportedAt": "2023-11-07T05:31:56Z",
"behavior": "report_only",
"disposition": "reported"
}
}
}
}
],
"counts": {
"pending": 1,
"in_progress": 1,
"resolved": 1,
"cancelled": 1
},
"hasMore": true,
"nextCursor": "<string>",
"asOf": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}