Get conversation summary
GET https://api.elevenlabs.io/v1/convai/conversations//summary
Get a lightweight summary of a conversation: its title, the generated transcript summary, whether the call was successful, and — only when the conversation is short — the plain chat messages. Tool calls, tool results, and contextual updates are omitted so the response stays small. Use this instead of the full conversation endpoint when you only need the gist (e.g. an agent reading many conversations); use GET /v1/convai/conversations/{conversation_id} when you need the full transcript with tool calls and contextual updates.
Reference: https://elevenlabs.io/docs/api-reference/conversations/get-summary
Servers
Section titled “Servers”https://api.elevenlabs.io(Production, default)https://api.us.elevenlabs.io(Production US)https://api.eu.residency.elevenlabs.io(Production EU)https://api.in.residency.elevenlabs.io(Production India)https://api.sg.residency.elevenlabs.io(Production Singapore)
Request
Section titled “Request”Path parameters
Section titled “Path parameters”conversation_id(string, required) — The id of the conversation you're taking the action on.
Query parameters
Section titled “Query parameters”max_messages(integer, optional, default: 40) — Maximum number of chat message turns to include inline. When the conversation has more than this, the messages are omitted and messages_omitted is set.
Response
Section titled “Response”Successful Response
conversation_id(string, required)agent_id(string, required)status(enum, required)- Allowed values:
initiated,in-progress,processing,done,failed
- Allowed values:
message_count(integer, required) — Number of plain chat message turns in the conversation.note(string, required) — Guidance telling the agent how to get the full transcript.call_summary_title(string, optional, nullable) — Short generated title for the conversation.transcript_summary(string, optional, nullable) — Generated natural-language summary of the call.call_successful(enum, optional, nullable)- Allowed values:
success,failure,unknown
- Allowed values:
messages(list of ConversationSummaryMessageModel, optional, nullable) — The plain chat messages (role and text only). Included only when message_count does not exceed the requested max_messages; otherwise null and messages_omitted is true.messages_omitted(boolean, optional, default: false) — True when the chat messages were omitted because the conversation was too long. Fetch the full transcript for the messages.
Errors
Section titled “Errors”422 Unprocessable Entity Error
Section titled “422 Unprocessable Entity Error”Validation Error
detail(list of ValidationError, optional)
ConversationSummaryMessageModel
Section titled “ConversationSummaryMessageModel”role(enum, required)- Allowed values:
user,agent
- Allowed values:
message(string, required)
ValidationError
Section titled “ValidationError”loc(list of ValidationErrorLocItems, required)msg(string, required)type(string, required)
ValidationErrorLocItems
Section titled “ValidationErrorLocItems”Examples
Section titled “Examples”Response
{
"conversation_id": "string",
"agent_id": "string",
"status": "initiated",
"message_count": 1,
"note": "string",
"call_summary_title": "string",
"transcript_summary": "string",
"call_successful": "success",
"messages": [
{
"role": "user",
"message": "string"
}
],
"messages_omitted": false
}SDK Code
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
async function main() {
const client = new ElevenLabsClient();
await client.conversationalAi.conversations.getSummary("21m00Tcm4TlvDq8ikWAM", {});
}
main();
from elevenlabs import ElevenLabs
client = ElevenLabs()
client.conversational_ai.conversations.get_summary(
conversation_id="21m00Tcm4TlvDq8ikWAM",
)
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}require 'uri'
require 'net/http'
url = URI("https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyimport com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse<String> response = Unirest.get("https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary")
.asString();<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary');
echo $response->getBody();using RestSharp;
var client = new RestClient("https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);import Foundation
let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/convai/conversations/21m00Tcm4TlvDq8ikWAM/summary")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error as Any)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()