Logo
Search
Docs

Call logs search

GET https://app.sulus.ai/api/call-logs/search

Full-text search call logs (call id, summary, transcript)

Authentication

Send a bearer token created on your dashboard's Developer page:

Authorization: Bearer <YOUR_API_KEY>

Query parameters

search string Required

Search term. Matched with LIKE against call_id, summary, and transcript.

Validation: required; minimum length 3 (enforced in controller, not FormRequest)
assistant_id integer Optional Nullable

Limit results to one local assistant id.

Stored in call_logs.assistant_id
status string Optional Nullable

When present and not the literal string "all", filters call_logs.status.

Stored in call_logs.status
direction string Optional Nullable

When present and not the literal string "all", filters call_logs.direction.

Stored in call_logs.direction
start_date string Optional Nullable

Inclusive lower bound on start_time (date portion).

Stored in call_logs.start_time
end_date string Optional Nullable

Inclusive upper bound on start_time (date portion).

Stored in call_logs.start_time
per_page integer Optional Nullable Default: 15

Page size. Not clamped in this controller.

page integer Optional Nullable Default: 1

Laravel paginator page number.

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"}
400 Missing search or fewer than 3 characters {"success":false,"message":"Search term must be at least 3 characters"}

Notes

  • Default per_page is 15 (list/index default to 20).
  • Results ordered by relevance CASE (call_id match, then summary, then transcript), then start_time descending.
  • status/direction value "all" is ignored (same as index).
curl --request GET \
  --url https://app.sulus.ai/api/call-logs/search \
  --header 'Authorization: Bearer <YOUR_API_KEY>'
import requests

url = "https://app.sulus.ai/api/call-logs/search"
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/search"
	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,
            "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",
            "summary": "Caller asked about return policy; assistant confirmed 30-day window.",
            "call_record_file_name": "rec_01hxyz9abcdeFGHIjklmnopq.mp3",
            "assistant_name": "Front Desk",
            "assistant_phone": "+14155550100",
            "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"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 15,
        "total": 2,
        "from": 1,
        "to": 2
    }
}