# List Call Logs

> GET /masking/call-logs — paginated call history with optional status and date-range filters.

Source: https://edesy.in/docs/number-masking/api-reference/list-call-logs

```
GET /masking/call-logs
```

Returns paginated call history with optional filters by status and date range.

## Query parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `page` | integer | No | Page number (1-based). Default `1`. |
| `per_page` | integer | No | Results per page (max 100). Default `20`. |
| `status` | string | No | Filter by status: `initiated`, `ringing`, `answered`, `in-progress`, `completed`, `failed`, `no-answer`. |
| `start_date` | RFC3339 datetime | No | Only return calls started after this timestamp. |
| `end_date` | RFC3339 datetime | No | Only return calls started before this timestamp. |

## Request

```bash
curl 'https://voice-api.edesy.in/v1/masking/call-logs?page=1&per_page=20' \
  -H "Authorization: Bearer vp_YOUR_API_KEY"
```

```javascript
const response = await fetch(
  "https://voice-api.edesy.in/v1/masking/call-logs?page=1&per_page=20",
  { headers: { "Authorization": "Bearer vp_YOUR_API_KEY" } },
);
console.log(await response.json());
```

```python
import requests

response = requests.get(
    "https://voice-api.edesy.in/v1/masking/call-logs",
    headers={"Authorization": "Bearer vp_YOUR_API_KEY"},
    params={"page": 1, "per_page": 20},
)
print(response.json())
```

## Responses

**`200` — Paginated list of calls**

```json
{
  "data": [
    {
      "id": "d28be7cd-9840-4b23-9627-199f1ef81fc6",
      "caller_number": "917969002802",
      "target_number": "9876543210",
      "masked_number": "917969002802",
      "direction": "click_to_call",
      "status": "completed",
      "started_at": "2026-05-11T08:30:00Z",
      "duration_sec": 94,
      "price": 3.0
    }
  ],
  "meta": { "total": 142, "page": 1, "per_page": 20, "total_pages": 8 }
}
```
