Squad call logs show
GET
https://app.sulus.ai/api/squad-call-logs/{callId}
Retrieve one squad call log and its structured conversation
Authentication
Send a bearer token created on your dashboard's Developer page:
Authorization: Bearer <YOUR_API_KEY>
Path parameters
callId
string
Required
Public call identifier (not the numeric primary key).
Validation:
must match squad_call_logs.call_id for a row in the caller's content-protection scopeStored in
squad_call_logs.call_idErrors
| Status | Meaning | Body |
|---|---|---|
401 |
Missing or invalid bearer token | |
403 |
Feature squad_call_logs not enabled for the account | {"message":"This feature is not enabled for your account. Please contact your administrator.","feature":"squad_call_logs"} |
404 |
No call_id in scope | {"success":false,"message":"Squad call log not found"} |
Notes
- Lookup is where(call_id, {callId}) under contentProtection.
- Numeric squad_id is always unset from data, for every role.
- End-user example omits cost, currency, metadata, webhook_data, nested assistant, and nested squad.
- Content admins also receive cost, currency, metadata, webhook_data, nested assistant (including vapi_assistant_id), and nested squad (Squad model hides numeric id). Raw dump bodies omitted from examples.
- Empty transcript yields conversation: {conversation:[], total_messages:0, participants:[]} with no summary key.
curl --request GET \
--url https://app.sulus.ai/api/squad-call-logs/{callId} \
--header 'Authorization: Bearer <YOUR_API_KEY>'
import requests
url = "https://app.sulus.ai/api/squad-call-logs/{callId}"
headers = {"Authorization": "Bearer <YOUR_API_KEY>"}
response = requests.get(url, headers=headers)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://app.sulus.ai/api/squad-call-logs/{callId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <YOUR_API_KEY>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
Response
200
{
"success": true,
"data": {
"id": 902,
"call_id": "call_01hsquad9abcdeFGHIjklmnopq",
"assistant_id": 57,
"user_id": 12,
"reseller_id": "9f3c2a10-5b6d-4e8f-9a1b-2c3d4e5f6789",
"workspace_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"phone_number": "+14155550100",
"caller_number": "+14155550199",
"duration": 210,
"status": "completed",
"direction": "inbound",
"start_time": "2026-07-30T15:10:00.000000Z",
"end_time": "2026-07-30T15:13:30.000000Z",
"transcript": "Assistant: Thanks for calling the frontline team.\nCustomer: I need billing help.\nAssistant: Transferring you now.",
"summary": "Caller transferred from intake to billing specialist; confirmed invoice date.",
"call_record_file_name": "rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"created_at": "2026-07-30T15:13:40.000000Z",
"updated_at": "2026-07-30T15:13:40.000000Z",
"has_recording": true,
"public_audio_url": "https://app.example.com/play/rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"public_audio_player_url": "https://app.example.com/p/rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"squad_name": "Frontline Team",
"squad_external_id": "sq_01habcdeFGHIjklmnopqrs",
"assistant_name": "Billing Specialist",
"assistant_phone": "+14155550100"
},
"conversation": {
"conversation": [
{
"id": 1,
"speaker": "Assistant",
"message": "Thanks for calling the frontline team.",
"timestamp": null,
"original_speaker": "Assistant"
},
{
"id": 2,
"speaker": "Customer",
"message": "I need billing help.",
"timestamp": null,
"original_speaker": "Customer"
},
{
"id": 3,
"speaker": "Assistant",
"message": "Transferring you now.",
"timestamp": null,
"original_speaker": "Assistant"
}
],
"total_messages": 3,
"participants": [
"Assistant",
"Customer"
],
"summary": {
"assistant_messages": 2,
"customer_messages": 1
}
}
}
Response — GET
/squad-call-logs/{callId}
200
{
"success": true,
"data": {
"id": 902,
"call_id": "call_01hsquad9abcdeFGHIjklmnopq",
"assistant_id": 57,
"user_id": 12,
"reseller_id": "9f3c2a10-5b6d-4e8f-9a1b-2c3d4e5f6789",
"workspace_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"phone_number": "+14155550100",
"caller_number": "+14155550199",
"duration": 210,
"status": "completed",
"direction": "inbound",
"start_time": "2026-07-30T15:10:00.000000Z",
"end_time": "2026-07-30T15:13:30.000000Z",
"transcript": "Assistant: Thanks for calling the frontline team.\nCustomer: I need billing help.\nAssistant: Transferring you now.",
"summary": "Caller transferred from intake to billing specialist; confirmed invoice date.",
"call_record_file_name": "rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"created_at": "2026-07-30T15:13:40.000000Z",
"updated_at": "2026-07-30T15:13:40.000000Z",
"has_recording": true,
"public_audio_url": "https://app.example.com/play/rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"public_audio_player_url": "https://app.example.com/p/rec_01hsquad9abcdeFGHIjklmnopq.mp3",
"squad_name": "Frontline Team",
"squad_external_id": "sq_01habcdeFGHIjklmnopqrs",
"assistant_name": "Billing Specialist",
"assistant_phone": "+14155550100"
},
"conversation": {
"conversation": [
{
"id": 1,
"speaker": "Assistant",
"message": "Thanks for calling the frontline team.",
"timestamp": null,
"original_speaker": "Assistant"
},
{
"id": 2,
"speaker": "Customer",
"message": "I need billing help.",
"timestamp": null,
"original_speaker": "Customer"
},
{
"id": 3,
"speaker": "Assistant",
"message": "Transferring you now.",
"timestamp": null,
"original_speaker": "Assistant"
}
],
"total_messages": 3,
"participants": [
"Assistant",
"Customer"
],
"summary": {
"assistant_messages": 2,
"customer_messages": 1
}
}
}