curl --request GET \
--url https://api.attention.tech/v2/conversations \
--header 'Authorization: <api-key>'import requests
url = "https://api.attention.tech/v2/conversations"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.attention.tech/v2/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://api.attention.tech/v2/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: <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://api.attention.tech/v2/conversations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<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://api.attention.tech/v2/conversations")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attention.tech/v2/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [],
"links": {
"self": "/v2/conversations?page=1",
"related": "/v2/conversations?page=2"
},
"meta": {
"totalRecords": 150
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}List Conversations
Retrieves a paginated list of conversations with their transcriptions. Supports various filtering options to narrow down the results based on date ranges, participants, teams, and conversation status.
curl --request GET \
--url https://api.attention.tech/v2/conversations \
--header 'Authorization: <api-key>'import requests
url = "https://api.attention.tech/v2/conversations"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.attention.tech/v2/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://api.attention.tech/v2/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: <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://api.attention.tech/v2/conversations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<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://api.attention.tech/v2/conversations")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attention.tech/v2/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [],
"links": {
"self": "/v2/conversations?page=1",
"related": "/v2/conversations?page=2"
},
"meta": {
"totalRecords": 150
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}{
"id": "not_found_error",
"status": "404",
"code": "404",
"title": "Not Found Error",
"detail": "The requested resource was not found",
"source": {
"pointer": "/data/attributes/id"
}
}Authorizations
Query Parameters
Start date and time for filtering conversations (ISO 8601 format)
End date and time for filtering conversations (ISO 8601 format)
Filter by last-updated lower bound (RFC 3339, e.g. 2026-04-01T00:00:00Z; fractional seconds and numeric UTC offsets accepted). Matches conversations whose updatedAt (when the conversation was last updated) is greater than or equal to this value. Only conversations that have an updatedAt are matched; updatedAt reflects changes to the conversation itself, not to related records such as scorecard results or CRM data. When set, results are ordered by updatedAt ascending and paged with cursor, and meta.totalRecords is a lower bound. For incremental sync, start with a full unfiltered pull, then pass the time of the previous sync minus a few minutes and deduplicate by id.
Filter by last-updated upper bound (RFC 3339, e.g. 2026-04-10T23:59:59Z; fractional seconds and numeric UTC offsets accepted). Matches conversations whose updatedAt (when the conversation was last updated) is less than or equal to this value. Only conversations that have an updatedAt are matched. When set, results are ordered by updatedAt ascending and paged with cursor, and meta.totalRecords is a lower bound.
Opaque cursor returned as nextCursor by a previous call with the same filters. Omit on the first page. Requires fromUpdatedAtDateTime or toUpdatedAtDateTime; page is ignored when set.
Page number for pagination (starts from 1)
Number of items per page
Filter conversations by owner IDs
Filter conversations by owner email addresses
Filter conversations by title using case-insensitive partial matching
Filter conversations by participant email addresses
Filter conversations by external opportunity IDs
CRM platform entity code to filter linked CRM records (e.g. companies, contacts, deals, owners, pipelines, users, account, contact, lead, opportunity, user)
companies, contacts, deals, owners, pipelines, users, account, contact, lead, opportunity, user CRM record field name (from org_crm_records.record_data) to match on linked CRM records
Exact values to match for the given CRM field. Values are OR'ed together.
Filter conversations by team IDs
Exclude internal conversations from results
Exclude conversations that haven't been analyzed
Filter conversations by analysis status (deprecated, use filter[hide_non_analyzed] instead)
Exclude conversations that are pending processing
Omit the transcript field from each conversation in the response. Conversations are not filtered; totals and pagination are unchanged.
Exclude conversations that failed processing
Include internal participants in the response
Include Zoom-specific metadata in the response
Include detailed transcript information in the response
Response
Successfully retrieved conversations
Show child attributes
Show child attributes
Show child attributes
Show child attributes
{
"self": "https://api.attention.tech/v2/conversations/123",
"related": "https://api.attention.tech/v2/conversations/123/participants"
}
Show child attributes
Show child attributes
{
"pageCount": 5,
"totalRecords": 100,
"pageNumber": 1,
"pageSize": 20
}
Opaque cursor for the next page when fromUpdatedAtDateTime or toUpdatedAtDateTime is set. Absent when there are no more results.
Was this page helpful?