> ## Documentation Index
> Fetch the complete documentation index at: https://dialnexa.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List Call Logs

> Retrieve enriched call logs with transcripts, sentiment, and post-call analysis.

<Warning>
  **Legacy endpoint - deprecated.** Unversioned endpoints are scheduled for removal on **July 31, 2026**. A public v1 replacement is not currently listed in the v1 reference. This endpoint remains available for existing integrations until then.
</Warning>

Returns enriched call logs for your organization. Unlike the basic [Calls](/docs/api-reference/v1/calls/list) endpoint, call logs include sentiment scores, call outcome, duration, and any custom fields extracted by your agent's post-call analysis.

## When to use this

Use call logs when building:

* Analytics dashboards with outcome metrics
* Quality assurance reviews
* CRM sync pipelines (push outcome data back to your system)
* Exportable reports filtered by date range or sentiment

## ETag caching

This endpoint supports HTTP ETags. On the first request, the server returns an `ETag` header. On subsequent requests, pass that value as `If-None-Match`. If the data has not changed, you'll receive a `304 Not Modified` with no body, which saves bandwidth and reduces latency on polling setups.

## Key query parameters

| Parameter                       | Description                                                                                                                  |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `agent_id`                      | Filter logs by a specific agent.                                                                                             |
| `status`                        | Filter by one call outcome status or comma-separated statuses.                                                               |
| `sentiment`                     | Filter by detected sentiment: `positive`, `neutral`, or `negative`.                                                          |
| `end_reason`                    | Filter by one exact hang up reason or comma-separated `end_reason` values.                                                   |
| `start_date` / `end_date`       | Date range filter (YYYY-MM-DD).                                                                                              |
| `duration_min` / `duration_max` | Filter by call duration in milliseconds.                                                                                     |
| `created_at`                    | Sort order, either `asc` or `desc`.                                                                                          |
| `duration` sort                 | When sorting by duration, failed or incomplete calls with zero or empty duration are placed after calls with real durations. |

## End Reasons

Call logs can include `end_reason` when the platform can identify why the call ended or failed.

| End reason              | Meaning                                                                    |
| ----------------------- | -------------------------------------------------------------------------- |
| `user_disconnected`     | The caller or recipient ended the call.                                    |
| `agent_disconnected`    | The agent or DialNexa side ended the call.                                 |
| `user_did_not_pick_up`  | The destination did not answer.                                            |
| `user_busy`             | The destination line was busy or rejected the call.                        |
| `user_unreachable`      | The carrier reported a temporary unreachable state.                        |
| `invalid_phone_number`  | The destination number could not be reached because the number is invalid. |
| `destination_forbidden` | The carrier or route blocked the destination.                              |
| `network_failure`       | A carrier or network failure prevented completion.                         |
| `voicemail_detected`    | Voicemail was detected.                                                    |
| `system_failure`        | DialNexa or the speech service failed after retry handling.                |
| `system_at_capacity`    | A provider capacity or rate-limit condition exhausted retry handling.      |
| `insufficient_balance`  | The call could not start because wallet balance was insufficient.          |
| `unknown`               | No more specific reason was available.                                     |


## OpenAPI

````yaml GET /call-logs
openapi: 3.0.0
info:
  title: DialNexa API
  description: >-
    Public REST API for the DialNexa voice AI platform. Versioned endpoints are
    under /v1; unversioned endpoints are legacy and deprecated.
  version: 1.0.0
servers:
  - url: https://api.dialnexa.com
    description: DialNexa production API
security:
  - bearer: []
tags:
  - name: API Keys
  - name: Agent Functions
  - name: Agents V1
  - name: Agents2
  - name: Batch Calls
  - name: Batch Calls V1
  - name: Call Logs
  - name: Calls
  - name: Calls V1
  - name: Campaign Leads
  - name: Campaigns
  - name: External Webhooks
  - name: Knowledge Base
  - name: Knowledge Base V1
  - name: LLMs
  - name: LLMs V1
  - name: Languages
  - name: Languages V1
  - name: Organization Phone Numbers
  - name: Organization Phone Numbers V1
  - name: Phone Number Pricing
  - name: Phone Number Pricing V1
  - name: Transcribers
  - name: Transcribers V1
  - name: User Webhooks
  - name: User Webhooks V1
  - name: V1
  - name: Voices
  - name: Voices V1
  - name: Webcall
  - name: Workflow Leads
  - name: Workflow Leads V1
  - name: Workflows
  - name: Workflows V1
paths:
  /call-logs:
    get:
      tags:
        - Call Logs
      summary: >-
        Get call logs with did_not_pick, completed, and failed statuses, with
        optional filtering and pagination
      description: >-
        **Legacy endpoint - deprecated, scheduled for removal on July 31,
        2026.** Use the `/v1` version for new integrations. 
      operationId: CallLogsController_findAll
      parameters:
        - name: agent_id
          required: false
          in: query
          description: >-
            Filter by agent ID(s) - can be a single ID or comma-separated list
            (e.g., 1,2,3)
          schema:
            type: string
        - name: call_id
          required: false
          in: query
          description: >-
            Filter by call ID - can be a single ID or comma-separated list
            (e.g., call_abc,call_def)
          schema:
            type: string
        - name: batch_call_id
          required: false
          in: query
          description: >-
            Filter by batch call ID - can be a single ID or comma-separated list
            (e.g., batch_abc,batch_def)
          schema:
            type: string
        - name: from
          required: false
          in: query
          description: Filter by sender phone number
          schema:
            type: string
        - name: to
          required: false
          in: query
          description: Filter by recipient phone number
          schema:
            type: string
        - name: type
          required: false
          in: query
          description: >-
            Filter by call type(s) - can be a single value or comma-separated
            list
          schema:
            type: string
            enum:
              - phone
              - web
        - name: call_direction
          required: false
          in: query
          description: >-
            Filter by call direction(s) - can be a single value or
            comma-separated list
          schema:
            type: string
            enum:
              - inbound
              - outbound
        - name: latency_min
          required: false
          in: query
          description: Filter by minimum latency (in milliseconds)
          schema:
            type: number
        - name: latency_max
          required: false
          in: query
          description: Filter by maximum latency (in milliseconds)
          schema:
            type: number
        - name: agent_version_id
          required: false
          in: query
          description: >-
            Filter by agent version ID(s) - can be a single ID or
            comma-separated list (e.g., 1,2,3)
          schema:
            type: string
        - name: agent_version_name
          required: false
          in: query
          description: Search by agent version name (partial match, case-insensitive)
          schema:
            type: string
        - name: sentiment
          required: false
          in: query
          description: >-
            Filter by sentiment(s) - can be a single value or comma-separated
            list
          schema:
            type: string
            enum:
              - positive
              - neutral
              - negative
              - unknown
        - name: start_date
          required: false
          in: query
          description: Filter by start date (ISO format)
          schema:
            type: string
        - name: end_date
          required: false
          in: query
          description: Filter by end date (ISO format)
          schema:
            type: string
        - name: duration_greater_than
          required: false
          in: query
          description: Filter by minimum call duration (in milliseconds)
          schema:
            type: number
        - name: duration_less_than
          required: false
          in: query
          description: Filter by maximum call duration (in milliseconds)
          schema:
            type: number
        - name: duration_min
          required: false
          in: query
          description: Filter by minimum duration range (in milliseconds)
          schema:
            type: number
        - name: duration_max
          required: false
          in: query
          description: Filter by maximum duration range (in milliseconds)
          schema:
            type: number
        - name: page
          required: false
          in: query
          description: Page number (starts from 1)
          schema:
            type: string
        - name: limit
          required: false
          in: query
          description: 'Number of records per page (min: 1, default: 20, max: 200)'
          schema:
            type: string
        - name: created_at
          required: false
          in: query
          description: Sort by created_at (asc or desc)
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: duration
          required: false
          in: query
          description: Sort by duration (asc or desc)
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: status
          required: false
          in: query
          description: >-
            Filter by call status(es) - can be a single status or
            comma-separated list
          schema:
            type: string
        - name: export
          required: false
          in: query
          description: Set to true to export all data without pagination
          schema:
            type: boolean
        - name: if-none-match
          required: true
          in: header
          schema:
            type: string
        - name: x-organization-id
          in: header
          description: Encrypted ID of the organization
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Return call logs with optional filtering and pagination
        '304':
          description: Call logs unchanged since previous ETag
        '400':
          description: Invalid filter parameters
      deprecated: true
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````