# Logs

> IVR Studio logs API - list and read call logs, HTTP request logs (with retry) and email notification logs, plus usage stats.

Source: https://edesy.in/docs/ivr/api/logs

The logs API returns the same records as the portal's log pages: every IVR call with its keys pressed, variables, answers and price; every HTTP request a flow or status callback made, with a retry for failed background requests; and every email notification. Lists are paginated with `page` and `per_page`, and can be filtered by flow and status.

## Call logs

| Method | Path | Notes |
|---|---|---|
| `GET` | `/v1/ivr/call-logs` | Query: `flow_id`, `status`, `source`, `reference_id`, `page`, `per_page` (default 20) |
| `GET` | `/v1/ivr/call-logs/{id}` | One call, including `answers` |
| `GET` | `/v1/ivr/calls/{call_sid}` | One call by call SID, including `http_requests` |

`source` is where the call came from: `inbound`, `api`, `test`, or an order automation.

Main fields:

| Field | Notes |
|---|---|
| `id`, `flow_id`, `flow_name`, `flow_version` | Which flow and version ran |
| `caller_number`, `called_number` | The two numbers |
| `status`, `hangup_cause`, `sip_status`, `call_outcome` | How the call ended. See [status callback](https://edesy.in/docs/ivr/api/outbound-ivr-calls#status-callback) |
| `dtmf_path` | Keys pressed, in order |
| `duration_sec`, `price`, `price_unit` | Duration and cost |
| `started_at`, `answered_at`, `ended_at` | Timestamps |
| `source`, `reference_id`, `variables` | API context |
| `recording_url`, `call_recording_url`, `voicemail_url` | Signed links, when present |
| `answers` | Spoken answers from Ask nodes (single-call endpoint) |

## HTTP logs

| Method | Path | Notes |
|---|---|---|
| `GET` | `/v1/ivr/http-logs` | Query: `flow_id`, `call_sid`, `status`, `kind`, `page`, `per_page` |
| `GET` | `/v1/ivr/http-logs/{id}` | One request with headers (secrets masked), body, response and attempts |
| `POST` | `/v1/ivr/http-logs/{id}/retry` | Retry a failed background request. Returns `409 not_retryable` otherwise |

| Filter | Values |
|---|---|
| `status` | `pending` (another attempt is due), `delivered`, `failed`, `skipped` |
| `kind` | `node` (HTTP Request node), `status_callback`, `test`, `order_action`, `outcome_action`, `order_action_test` |

## Email logs

`GET /v1/ivr/email-logs?flow_id=&status=&page=&per_page=` (default 25 per page)

| Field | Notes |
|---|---|
| `call_sid`, `flow_id`, `flow_name` | Which call and flow |
| `recipient`, `subject` | Where it went |
| `status` | `sent` (accepted by the email provider), `failed`, `suppressed` (skipped by a burst guard), `no_recipient` |
| `error` | Why it failed, when it did |
| `created_at` | When |

## Stats

`GET /v1/ivr/stats` returns `total_flows`, `published_flows`, `active_numbers`, `total_calls`, `total_minutes`, `total_cost`, `completed_calls` and `failed_calls`.

See also the portal views: [Call Logs](https://edesy.in/docs/ivr/logs/call-logs), [HTTP Logs](https://edesy.in/docs/ivr/logs/http-logs) and [Email Logs](https://edesy.in/docs/ivr/logs/email-logs).
