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

# Capacity-adjusted booking rates

> Exclude appointment-time losses from recovered booking-rate denominators in Call Analytics, CSV exports, and the API.

Capacity-adjusted booking rates show booking performance after removing bookable calls classified as **Unbooked – Time Concern** from the denominator. These optional metrics must be enabled for your team or enterprise. Contact your Avoca team if they are unavailable.

## Understand the two rates

Both metrics keep the same numerator: **Booked Calls + Recovered Calls**. Booked Calls includes bookings completed after a transfer. Recovered Calls includes qualifying follow-up bookings and manual recovery marks.

| Metric                                         | Calculation                                                                                              |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| **Capacity Adj. Fully Recovered Booking Rate** | `(Booked Calls + Recovered Calls) / (Contained Leads + Transferred Leads − Unbooked–Time Concern) × 100` |
| **Capacity Adj. Raw Recovered Booking Rate**   | `(Booked Calls + Recovered Calls) / (Total Calls − Unbooked–Time Concern) × 100`                         |

Transferred leads include leads dropped during a transfer where that classification is enabled. Time Concern counts only unbooked leads, including transferred leads whose final transfer outcome was unbooked. Already-booked calls and non-leads are not removed.

For example, with **100 total calls**, **80 leads**, **40 booked calls**, **8 recovered calls**, and **20 unbooked Time Concern calls**:

* Fully recovered: `(40 + 8) / (80 − 20) = 80%`.
* Raw recovered: `(40 + 8) / (100 − 20) = 60%`.

If the adjusted denominator is zero, the dashboard shows **—**, the API returns **null**, and the CSV cell is blank.

<Note>
  Time Concern uses the recorded unbooked call classification. A call subsequently recovered can still have that classification: it remains in the recovered numerator and the Time Concern exclusion. In that case, the adjusted rate can exceed 100%. These metrics are an adjustment scenario, not an actual conversion rate or a forecast.
</Note>

## Add the metrics to your dashboard

1. Open **Channels → Calls**, or your enterprise **Calls** page.
2. Set the date range and call filters.
3. Open **Customize Metrics** and select either or both capacity-adjusted rates.
4. Save your selection. Hover over a metric's information icon to see the counts and subtraction used in its calculation.

Choose **Export capacity metrics** beside the customization control to download one CSV row containing the displayed counts and both rates. It uses the same date range and call filters as those cards. This is a metrics summary; the existing per-call export remains separate.

## Retrieve JSON or CSV from the API

Use a key with **`read:calls`** permission and access to the requested team:

`GET https://api.prod.avoca.ai/api/v1/teams/{teamId}/call-analytics/capacity-adjusted-booking`

Supply `dateFrom` and `dateTo` as ISO timestamps with a time-zone offset. A request can span at most **31 days**. This endpoint uses the team's default call-type scope and excludes the standard non-actionable call reasons. Additional dashboard filters are not supported by this endpoint; use the dashboard export for a filtered view.

```bash theme={null}
curl --get "https://api.prod.avoca.ai/api/v1/teams/$TEAM_ID/call-analytics/capacity-adjusted-booking" \
  --header "Authorization: Bearer $AVOCA_API_KEY" \
  --data-urlencode 'dateFrom=2026-08-01T00:00:00Z' \
  --data-urlencode 'dateTo=2026-08-31T23:59:59Z'
```

```json theme={null}
{
  "data": {
    "totalCalls": 100,
    "bookableCalls": 80,
    "bookedCalls": 40,
    "recoveredCalls": 8,
    "unbookedTimeConcernCalls": 20,
    "fullyRecoveredBookingRate": 80,
    "rawRecoveredBookingRate": 60
  }
}
```

Add `--data-urlencode 'format=csv'` to download the same result as CSV. The column names match the JSON fields above. Rates are percentages, so `80` means **80%**.

For a period longer than 31 days, request non-overlapping ranges, sum the count fields, and recompute the rates using those sums. Do not average percentages. Use inclusive timestamp boundaries that do not overlap between requests.

The endpoint returns **404** when the feature is disabled, **400** for an invalid date range, and **401/403** for missing authentication or insufficient access. Requests are limited to **10 per minute**; wait before retrying a **429** response. An unavailable aggregate returns **503**; retry later rather than interpreting it as zero.

These rates use call outcomes. They do not use the number of days until an appointment was available. See [soonest availability reporting](/api-reference/soonest-availability) for that separate measure.
