Zoom Phone Usage Report (By Users) – API fields to match UI export

Hello,

I am an admin trying to replicate the Zoom Phone UI report:

Phone System → Reports → Usage Reports → Usage → By Users

When exporting the report from the UI, the CSV includes columns like:

• Total Calls
• Missed
• Avg Call Time
• Total Call Time
• Total Hold Time

I am currently using the API endpoint:

GET /v2/phone/call_logs

with pagination and aggregating results by extension/user.

However, the totals do not exactly match the UI export. For some users:

• Completed calls appear as 0 even though total call time exists
• Total call time differs slightly from the UI report
• Some calls may be counted differently (possibly call legs, transfers, or queue calls)

Could you please clarify:

  1. Which API field corresponds to the UI “Total Call Time”?
  2. How does the UI determine “Completed Calls” vs “Missed”?
  3. Does the UI filter out transfer legs or queue legs?
  4. Is there an API endpoint that directly returns the same data as the “Usage → By Users” report?

Example extensions where mismatches occur:
• 5392
• 9849

Thank you.

Hi Zoom Developer Support team, following up on this request.

We moved from call-log aggregation to GET /v2/phone/reports/usage/users for weekly KPI automation and now match almost all rows with the Zoom UI export (“Usage → By Users”).

Remaining variance is very small:

  • 2 users differ by 1 call

  • 1 user differs by 1.54 minutes

  • all others match

Could you confirm:

  1. Which API field is the exact source for UI “Total Call Time” in Usage → By Users?

  2. Are transfer legs / queue-related legs counted differently in UI vs API?

  3. Is there any documented normalization applied in UI export that is not in API response?

HI @Vamsi_Krishna
Thanks for reaching out to us and welcome to the Zoom Developer Forum.
Can you please make sure you are using the right enpdoint to pull call history.
We have deprecated the Get/v2/phone/call_logs endpoint a while ago, and you should be using the Get account’s call history endpoint instead (phone/call_history)

Here is a migration guide that will help you migrate Migrate Zoom Phone Call Log APIs to Call History - Phone - Zoom Developer Docs

Now to help answer your questions:

  1. Which API field is the exact source for UI “Total Call Time” in Usage → By Users?

You should be able to get the right data for each user by using the Get user’s call history endpoint. You will need to look into different fields to get the total call time, and define what you need or want to see, by using the fields “start_time”, “answer_time” and “end_time”

  1. Are transfer legs / queue-related legs counted differently in UI vs API?

I don’t believe so, you should be able to find the call elements /legs for each call using this endpoint riqht here:

  1. . Is there any documented normalization applied in UI export that is not in API response?

The UI and the API might not be mirrored and 100% the same, so you will need to look throught the API specs and define what you need/want to create your own reporting tools

Hi Elisa,

Thanks for the clarification.

Understood on the deprecation of /v2/phone/call_logs and the recommendation to use call history endpoints for raw call-level data.

One follow-up question from our side: for the Zoom UI export under Phone -> Usage -> By Users, which API endpoint is the closest source to that export specifically?

In our testing, aggregating call_history is still producing small differences compared with the UI export, while phone/reports/usage/users appears much closer to the exported totals.

Could you please confirm which endpoint should be treated as the closest API equivalent of the Usage -> By Users UI report?

Thanks.

Hi @Vamsi_Krishna
Where do you find the Zoom UI export you mentioned? phone → usage → by users
I am not able to locate it

If you find less discrepancies with the phone/reports/usage/users endpoint then I would recomend you use that report API to get your data and you could potentially enrich it with the phone/call_history endpionts

Hi Elisa,

Thanks, this helps.

Yes, our current implementation is already using GET /phone/reports/usage/users as the primary source, and only using phone/call_history as supplemental/fallback detail.

We are still seeing differences between the Zoom export used by the business and the API output for the same weekly window. For example, for 2026-03-15 to 2026-03-21:

  • one sales rep shows 214 calls and 3:15:31 in the Zoom export, while the API output shows 234 calls and 3:41:29

  • another sales rep shows 196 calls and 3:36:59 in the Zoom export, while the API output shows 216 calls and 4:07:27

We also see the gap at the overall report level, not just on individual rows.

So we will continue using phone/reports/usage/users as the closest available API source, but wanted to share that the discrepancy still exists at both row and total-report level.

Thanks again.

Thanks for sharing those details @Vamsi_Krishna
Just as a last suggestion, have you tried going into the UI > Admin > Phone system Management > Call logs and filter by date? this should give you the same data than the API

Hi Elisa,

Thanks again, this is helpful.

Understood that the Call Logs UI aligns to the raw call-history API family, and that we could build our own summarized reporting from that raw data.

Our main question now is: if we wanted to reproduce the Zoom user-level summary behavior from raw call history, could you clarify the counting rules used by Zoom for that summary?

Specifically:

  1. Which raw call-history events contribute to Total Calls

  2. Which fields should be used to derive Total Call Time

  3. Whether rejected, unconnected, missed, or answered-by-other calls are included

  4. How transfer legs and queue-related legs are treated

  5. Whether the user summary report applies any internal normalization or filtering beyond the raw call-history data

That would help us understand whether it is possible to reproduce the same summary behavior consistently from raw data.

Thanks.

Hi @Vamsi_Krishna
To get useres call history, you should be able to use the Get user’s call history endpoint here: Phone APIs - API - Zoom Developer Docs

In the response body of this endpoint, you will see fields such as talk time, hold time, wait time and others.

you should also be able to see the result of the call, like answered, missed etc.

This endpoint should be able to help you get that data

Hi Elisa,

Thanks, this is helpful.

To clarify our use case, the business is currently using the manual Zoom UI path shown in the attached screenshot:

Reports > Usage Reports > Phone System > By Users

and we are trying to automate that same weekly KPI reporting through the API.

Right now, we are using phone/reports/usage/users as the closest available source for that user-level summary view, while using call history only as supplemental detail when needed.

We understand that the user call history endpoint provides raw fields such as talk_time, hold_time, wait_time, and call result. Our question is whether the By Users summary can be reproduced from those raw fields using a defined set of rules.

Could you please clarify:

  1. which call results count toward total calls

  2. which duration fields contribute to total call time

  3. how transfer legs, queue legs, and answered-by-other events are treated

That would help us determine whether we should continue using the report endpoint as the closest source, or build a custom summary from raw call history.

Thanks.

Thanks @Vamsi_Krishna
I see what you mean. I think the report endpoint will provide you more info on what you need then.

To get duration of the call you will need to calculate the times using various fields such a start_time, answer_time and end_time

To get all the transfered legs, you will have to then use the Get call history endpoint to get the specific details of each call