---
title: "Retrieve call detail records"
method: GET
path: "/api/v1/calls"
tags: ["Calls"]
---

# Retrieve call detail records

`GET /api/v1/calls`

## Request

- Base URL: `https://app.didlogic.com`
- URL: `https://app.didlogic.com/api/v1/calls`
- Auth: HTTP bearer

Retrieve a list of call detail records (CDR) with filtering and pagination options.

**Important notes:**
- Results can be filtered by date range, call type, phone numbers, SIP account, AMD status and hangup cause
- Supports both JSON and CSV export formats
- Use pagination for large result sets
- Statistics include total count, duration, and cost

**When to use:**
- Generating call history reports
- Analyzing call patterns and costs
- Exporting billing data
- Monitoring SIP account usage

See also: calls_statistics, totals for the same filters.

## Query parameters

- `type` 'sip' | 'web' | 'incoming' | 'api'
- `missed` '0' | '1'
- `from_search` string
- `to_search` string
- `amd_status` string
- `hangup_cause` 'AMD_MACHINE' | 'NORMAL_CLEARING' | 'NO_ANSWER' | 'BUSY' | 'FAILED'
- `filter` string
- `sip_account` string
- `from` string, date
- `to` string, date
- `all` boolean
- `page` integer
- `per_page` integer

## Response `200`

Successfully retrieved CDR records

- CdrListResponse: Paginated list of CDR records
  - `calls` union[], required: Array of call detail records
    - union
      - SipCdr: Outbound SIP call detail record
        - `timestamp` string, date-time, required: Call start time in ISO 8601 format (UTC)
        - `type` 'sip' | 'incoming' | 'web' | 'api', required: Call type
        - `amount` number, float, required: Call cost (charged/credited amount)
        - `duration` integer, required: Call duration in seconds. 0 = missed call
        - `from` string, required: Caller number/identifier
        - `to` string, required: Destination number/identifier
        - `amd_status` string, nullable, required: Answering machine detection (AMD) verdict of an outbound call: - `machine` — AMD detected an answering machine - `human` — AMD detected a person - `notsure` — AMD ran but could not tell a machine from a person, for example on silence, unclear audio or a timeout `null` when no AMD result was recorded for the call, which is always the case for incoming calls.
        - `amd_score` integer, nullable, required: Probability that an answering machine picked up, as a percentage from 0 to 100, as reported by the AMD detector. It is not a confidence in `amd_status`, and it carries no meaning when `amd_status` is `notsure`. `null` whenever `amd_status` is `null`.
        - `hangup_cause` 'AMD_MACHINE' | 'NORMAL_CLEARING' | 'NO_ANSWER' | 'BUSY' | 'FAILED' | 'null', nullable, required: How the call ended: - `AMD_MACHINE` — AMD detected an answering machine; takes precedence over the other values - `NORMAL_CLEARING` — the call was answered - `NO_ANSWER` — nobody answered, including calls the caller cancelled before an answer - `BUSY` — the called party was busy - `FAILED` — the call could not be connected `null` for calls made before hangup causes were recorded, for calls whose outcome the platform did not recognise, and for API calls that never reached the destination number.
        - `destination_name` string: Destination country/region name
        - `sip_account` string, nullable: SIP account used for the call
        - `per_minute` number, float, nullable: Per-minute rate. null = unknown, 0 = free
      - IncomingCdr: Incoming call detail record
        - `timestamp` string, date-time, required: Call start time in ISO 8601 format (UTC)
        - `type` 'sip' | 'incoming' | 'web' | 'api', required: Call type
        - `amount` number, float, required: Call cost (charged/credited amount)
        - `duration` integer, required: Call duration in seconds. 0 = missed call
        - `from` string, required: Caller number/identifier
        - `to` string, required: Destination number/identifier
        - `amd_status` string, nullable, required: Answering machine detection (AMD) verdict of an outbound call: - `machine` — AMD detected an answering machine - `human` — AMD detected a person - `notsure` — AMD ran but could not tell a machine from a person, for example on silence, unclear audio or a timeout `null` when no AMD result was recorded for the call, which is always the case for incoming calls.
        - `amd_score` integer, nullable, required: Probability that an answering machine picked up, as a percentage from 0 to 100, as reported by the AMD detector. It is not a confidence in `amd_status`, and it carries no meaning when `amd_status` is `notsure`. `null` whenever `amd_status` is `null`.
        - `hangup_cause` 'AMD_MACHINE' | 'NORMAL_CLEARING' | 'NO_ANSWER' | 'BUSY' | 'FAILED' | 'null', nullable, required: How the call ended: - `AMD_MACHINE` — AMD detected an answering machine; takes precedence over the other values - `NORMAL_CLEARING` — the call was answered - `NO_ANSWER` — nobody answered, including calls the caller cancelled before an answer - `BUSY` — the called party was busy - `FAILED` — the call could not be connected `null` for calls made before hangup causes were recorded, for calls whose outcome the platform did not recognise, and for API calls that never reached the destination number.
        - `did_number` string, nullable: DID number that received the call (purchased virtual number)
      - WebCdr: Web call detail record (no additional fields)
        - `timestamp` string, date-time, required: Call start time in ISO 8601 format (UTC)
        - `type` 'sip' | 'incoming' | 'web' | 'api', required: Call type
        - `amount` number, float, required: Call cost (charged/credited amount)
        - `duration` integer, required: Call duration in seconds. 0 = missed call
        - `from` string, required: Caller number/identifier
        - `to` string, required: Destination number/identifier
        - `amd_status` string, nullable, required: Answering machine detection (AMD) verdict of an outbound call: - `machine` — AMD detected an answering machine - `human` — AMD detected a person - `notsure` — AMD ran but could not tell a machine from a person, for example on silence, unclear audio or a timeout `null` when no AMD result was recorded for the call, which is always the case for incoming calls.
        - `amd_score` integer, nullable, required: Probability that an answering machine picked up, as a percentage from 0 to 100, as reported by the AMD detector. It is not a confidence in `amd_status`, and it carries no meaning when `amd_status` is `notsure`. `null` whenever `amd_status` is `null`.
        - `hangup_cause` 'AMD_MACHINE' | 'NORMAL_CLEARING' | 'NO_ANSWER' | 'BUSY' | 'FAILED' | 'null', nullable, required: How the call ended: - `AMD_MACHINE` — AMD detected an answering machine; takes precedence over the other values - `NORMAL_CLEARING` — the call was answered - `NO_ANSWER` — nobody answered, including calls the caller cancelled before an answer - `BUSY` — the called party was busy - `FAILED` — the call could not be connected `null` for calls made before hangup causes were recorded, for calls whose outcome the platform did not recognise, and for API calls that never reached the destination number.
  - `pagination` Pagination, required: Pagination metadata for list responses
    - `page` integer, required: Current page number (1-based)
    - `per_page` integer, required: Number of records per page
    - `total_pages` integer, required: Total number of pages available
    - `total_records` integer, required: Total number of records

## Other responses

- `401`: Unauthorized - Invalid or missing authentication token
- `403`: Forbidden - Valid token but user is blocked or inactive

---

[API](https://skmtc.dev/didlogic/apis/get-started.md) · [All operations](https://skmtc.dev/didlogic/apis/get-started/llms.txt) · [OpenAPI document](https://skmtc.dev/didlogic/apis/get-started/revisions/dc972d592b34?raw)
