# Number Health and Webhook Logs

> Check an Edesy number's call volume and answer rate, see whether your webhook was reached, send a test request, and toggle recording - per number.

Source: https://edesy.in/docs/voice-api/phone-numbers/number-health-and-webhook-logs

Each number has its own health view: call counts for today, 7 and 30 days, the 7-day answer rate and the last call, plus the recent webhook deliveries for that number and a button that sends a test request to your voice URL. Use them to answer "is this number working, and did my server get the call?" without opening a ticket.

## Stats

`GET https://voice-api.edesy.in/v1/phone-numbers/{id}/stats`

```json
{
  "data": {
    "calls_today": 14,
    "calls_7d": 96,
    "calls_30d": 402,
    "answered_pct": 91.7,
    "last_call_at": "2026-10-28T09:12:44Z",
    "last_call_status": "completed",
    "active_last_1h": true
  }
}
```

| Field | Description |
|---|---|
| `calls_today`, `calls_7d`, `calls_30d` | Inbound call counts |
| `answered_pct` | Share of the last 7 days' calls that completed |
| `last_call_at`, `last_call_status` | Most recent call |
| `active_last_1h` | Whether the number had a call in the last hour |

A number that suddenly drops to zero calls, or whose answer rate falls, usually has a broken target. Check the webhook logs and the call [event timeline](https://edesy.in/docs/voice-api/calls/call-events-and-outcomes).

## Webhook logs

`GET https://voice-api.edesy.in/v1/phone-numbers/{id}/webhook-logs?limit=10`

Returns the most recent webhook deliveries for calls to this number: the URL, method, response status, response time and error, if any. `limit` defaults to 10.

## Test your webhook

`POST https://voice-api.edesy.in/v1/phone-numbers/{id}/test-webhook`

Sends a sample inbound request (`CallStatus=ringing`, `Direction=inbound`, plus `EdesyTestRequest=true`) to the number's voice URL and reports what came back:

```json
{
  "data": {
    "ok": true,
    "method": "POST",
    "url": "https://example.com/edesy/inbound",
    "status_code": 200,
    "latency_ms": 184,
    "content_type": "application/json",
    "body_preview": "{\"instructions\":[{\"verb\":\"say\",..."
  }
}
```

It returns `no_webhook_url` if the number has no voice URL. Ignore requests with `EdesyTestRequest=true` in your business logic.

## Telephony readiness

`GET https://voice-api.edesy.in/v1/phone-numbers/{id}/telephony` shows whether the number can place calls (`outbound_capable`) and whether an inbound target is bound (`inbound_bound`).

## Recording toggle

Turn recording on or off for every call on the number:

```bash
curl -X PATCH https://voice-api.edesy.in/v1/phone-numbers/{id} \
  -H "Authorization: Bearer $EDESY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "recording_enabled": true }'
```

See [Recordings and Transcriptions](https://edesy.in/docs/voice-api/calls/recordings-and-transcriptions).

## Test call

The number's page in [voice-app.edesy.in](https://voice-app.edesy.in) has a test-call button that rings the number so you can hear the inbound target end to end.
