Logo
Search
Docs

Call logs show

GET https://app.sulus.ai/api/call-logs/{callId}

Retrieve one 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 call_logs.call_id for a row in the caller's content-protection scope
Stored in call_logs.call_id

Errors

StatusMeaningBody
401 Missing or invalid bearer token
403 Feature call_logs not enabled for the account {"message":"This feature is not enabled for your account. Please contact your administrator.","feature":"call_logs"}
404 No call_id in scope {"success":false,"message":"Call log not found"}

Notes

  • Lookup is where(call_id, {callId}) under contentProtection — numeric id in the path will 404 unless it happens to equal call_id.
  • End-user example omits cost, currency, metadata, webhook_data, and nested assistant (stripped in the controller).
  • Content admins also receive cost, currency, metadata, webhook_data, and nested assistant (including assistants.vapi_assistant_id and the Assistants-module alias assistant_id on that nested object). Raw metadata/webhook_data payloads are omitted from examples.
  • Empty transcript yields conversation: {conversation:[], total_messages:0, participants:[]} with no summary key.
  • Speaker lines matching AI|User|Assistant|Customer|Bot are normalised to Assistant or Customer; timestamp on each message is always null today.
curl --request GET \
  --url https://app.sulus.ai/api/call-logs/{callId} \
  --header 'Authorization: Bearer <YOUR_API_KEY>'
import requests

url = "https://app.sulus.ai/api/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/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": 1842,
        "call_id": "call_01hxyz9abcdeFGHIjklmnopq",
        "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": 142,
        "status": "completed",
        "direction": "inbound",
        "start_time": "2026-07-30T14:02:11.000000Z",
        "end_time": "2026-07-30T14:04:33.000000Z",
        "transcript": "Assistant: Thanks for calling. How can I help?\nCustomer: What is your return policy?\nAssistant: You can return items within 30 days with a receipt.",
        "summary": "Caller asked about return policy; assistant confirmed 30-day window.",
        "call_record_file_name": "rec_01hxyz9abcdeFGHIjklmnopq.mp3",
        "created_at": "2026-07-30T14:04:40.000000Z",
        "updated_at": "2026-07-30T14:04:40.000000Z",
        "has_recording": true,
        "public_audio_url": "https://app.example.com/play/rec_01hxyz9abcdeFGHIjklmnopq.mp3",
        "public_audio_player_url": "https://app.example.com/p/rec_01hxyz9abcdeFGHIjklmnopq.mp3",
        "assistant_name": "Front Desk",
        "assistant_phone": "+14155550100"
    },
    "conversation": {
        "conversation": [
            {
                "id": 1,
                "speaker": "Assistant",
                "message": "Thanks for calling. How can I help?",
                "timestamp": null,
                "original_speaker": "Assistant"
            },
            {
                "id": 2,
                "speaker": "Customer",
                "message": "What is your return policy?",
                "timestamp": null,
                "original_speaker": "Customer"
            },
            {
                "id": 3,
                "speaker": "Assistant",
                "message": "You can return items within 30 days with a receipt.",
                "timestamp": null,
                "original_speaker": "Assistant"
            }
        ],
        "total_messages": 3,
        "participants": [
            "Assistant",
            "Customer"
        ],
        "summary": {
            "assistant_messages": 2,
            "customer_messages": 1
        }
    }
}