In this article
Overview
Set up a webhook callback URL
dropdown icon
Partner API endpoints
    Reconciliation API endpoint
    Records API endpoint
    Partner reports/templates API

Detailed call records webhook for Webex Calling in Partner Hub

list-menuIn this article
list-menuFeedback?

Webex Calling multi-tenant (MT) partners can set up a webhook to gather Webex Calling records for all your customers. This enables efficient billing reconciliation, analytics, and reporting without needing to query each customer individually.

Overview

The Detailed Call Records webhook offers a secure, scalable, and robust solution driven by events rather than requests. This webhook provides greater visibility into your customers' Webex Calling activities, supporting use cases from billing to custom-tailored reporting.

You can use this webhook to gather records conveniently for all customers managed through Partner Hub without querying each customer individually. This webhook allows you to develop custom reporting, billing, and analytic applications for both internal business requirements and value-added services.

For an introduction to the webhook and its accompanying APIs, watch this Vidcast: Webex Calling Partner Detailed Call History API.

What the Partner webhook delivers

The webhook delivers detailed call history records every 5 minutes. Each webhook payload contains:

  • Call records that ended between 10 minutes and 5 minutes prior to the current time.
  • Any late records processed by the Webex Calling cloud.
  • Automatically backfills late call records in the subsequent webhook payloads to ensure reliable delivery.

To show how call records are included in each payload, consider the following example:

  • A payload received at 14:05 contains calls that ended between 13:55 and 14:00.
  • Calls ending between 14:00 and 14:05 are included in the 14:10 payload.
  • Records completed earlier (for example, a call that ended at 14:04) but processed late by Webex Calling cloud (for example, at 14:11) are included in the next scheduled payload (for example, 14:15).

The webhooks reliably deliver records. However, you may receive duplicate records in subsequent webhook payloads when the system replays records under certain conditions. You are responsible for handling record de-duplication. To identify duplicate records, use the reportId field as the primary key and the reportTime field to determine when a call was completed or processed. Use these fields to update or insert the records into your internal data stores.

Webhook in Parter Hub

By providing a webhook, you enable the analytics platform to send call records to your callback URL whenever they are generated.

Webex Calling records are delivered using the same format as the existing Detailed Call Records APIs. You can set up a webhook and choose between two types of feed:

  • Analytics—Includes all call records for all customer organizations that the partner has a Webex Calling relationship with. This includes organizations where:
    • The partner manages the customer organization with a Partner Full Administrator role.
    • The customer organization has an active Webex Calling subscription within the partner organization.
  • Billing—Includes call records for calls made by users with a Webex Calling license sold and provisioned by the partner. Call records for Workspaces are included in this feed.

Access and data privacy

Only the owning partner can access Call Detail Records (CDR) for billing.

  • A partner (or sub-partner) that manages the license associated with the call record becomes the owning partner.
  • Ownership is determined by: User ID > License ID > Subscription ID > Partner ID.
  • Each CDR is accessible to a single partner.
  • Some call records don’t map to a billing partner, and not all partners associated with an organization receive equal access to all records, since these records may contain personally identifiable information (PII).

Set up a webhook callback URL

Configure the webhook in the Partner Hub. You can only set up one webhook per partner organization.

Ensure that you have the Partner full admin role with 'Organizational full admin level access', and Webex Calling CDR API access checked in Control Hub (under Management > Users, select a full admin or partner full admin, and then select Administrator roles > Partner).

Screenshot showing administrator roles settings with Partner admin and Partner full admin selected, along with Webex Calling CDR API Access checked under Functional settings.

1

Sign in to Partner Hub.

2

Go to Organization Settings > Call detail records.

Screenshot of Organization Settings for Call Detail Records, displaying fields for Webhook URL, Secret token, and Resource Type with Analytics selected.
3

Enter a URL to use under Webhook.

The URL must end with /webhook (for example, https://yourdomain.com/webhook).
4

If you'd like to authenticate your webhook payloads with a secret token, you can add one. To find more information about Webex webhooks and secret tokens, see Webex for Developers: Webhooks.

5

Select one of the following Resource type to use for the webhook:

  • Analytics—Includes all call records for all customer organizations that the partner has a Webex Calling relationship with.
  • Billing—Includes call records for users to whom the partner sold Webex Calling licenses. Call records for Workspaces are included in this feed.

Partner API endpoints

In addition to the webhook, Webex Calling provides API endpoints to support data reconciliation. These endpoints allow you to catch up or reconcile your data stores with any missing records that your webhook listener might not have received. The two API endpoints are the Reconciliation API and the Records API.

Records from these APIs are available for 30 days. To ensure you receive all expected records, we recommend reconciling your record stores periodically, such as every 12 or 24 hours.

You must use a partner access token to access these APIs. Obtain and manage your partner access token according to standard Webex Developer access token management practices.

API window ranges are applicable to both endpoints to better handle service load.

  • For time ranges greater than 48 hours, the maximum allowed window duration is 12 hours (recommended and enforced).
  • For time ranges of 48 hours or less, the maximum allowed window duration is 48 hours (not recommended; this option will be deprecated as of January 30, 2026).
  • For a partner organization ID, the APIs are rate-limited to one initial API request per minute, per token scope. If pagination is used, up to 10 additional paginated API requests per minute, per token are allowed, and these can be made immediately after the initial request.

Reconciliation API endpoint

The Reconciliation API endpoint returns the total number of call records count generated for each customer managed by the partner within the specified time period. You can use these totals to verify your local storage and identify any missing or inconsistent call records for specific customers.

If you manage more than 200 customer organizations, the API paginates the results to improve readability.

The Reconciliation API endpoint URL uses the following format:

https://analytics-calling.webexapis.com/v1/partners/cdrcountbyorg?endTime=YYYY-MM-DDTHH:MM:SS.000Z&startTime=YYYY-MM-DDTHH:MM:SS.000Z

API Parameters

You can use the API to retrieve call records from the last 30 days. Your selected time window must start at least 5 minutes before the current UTC time and cannot exceed 12 hours between the start and end times in a single API call.

The API parameters are:

  • startTime (required, string)—The start date and time (UTC) for the first record you want to collect. Ensure that:
    • You format the time as YYYY-MM-DDTHH:MM:SS.mmmZ. For example, 2025-08-15T06:00:00.000Z.
    • The start date and time must not be older than 30 days from the current UTC time.
    • The window between startTime and endTime can’t exceed 12 hours.
  • endTime (required, string)—The end date and time (UTC) for the records you want to collect. Records are based on report time, which is when the call is done. Ensure that:
    • You format the time as YYYY-MM-DDTHH:MM:SS.mmmZ. For example, 2025-08-15T18:00:00.000Z.
    • The end date and time must be 5 minutes before the current UTC time and no older than 30 days.
    • The end date and time must be greater than the startTime.
    • The window between the startTime and endTime can’t exceed 12 hours.

Example of a Reconciliation API endpoint JSON response:


          {
          "cdr_counts": [
          {
          "orgId": "zzzzzzzz-yyyy-zzzz-xxxx-yyyyyyyyyyyy",
          "count": 3009
          },
          {
          "orgId": "yyyyyyyy-yyyy-zzzz-xxxx-yyyyyyyyyyyy",
          "count": 129
          },
          {
          "orgId": "xxxxxxxx-yyyy-zzzz-xxxx-yyyyyyyyyyyy",
          "count": 27895
          }
          ]
          }          
        

The API response headers indicate the total number of organizations returned and whether additional pages are available. Check the following header parameters to ensure you have queried all pages:

  • num-pages: Total number of pages (for example, 2)
  • total-orgs: Total number of organizations included in the response (for example, 283)
  • current-page: The current page number (for example, 1)

For example, if the headers show num-pages=2, total-orgs=283, and current-page=1, you are viewing the first page of a two-page response containing 283 organizations in total. To access the next page, add the page=2 parameter to your GET request, as shown below:

https://analytics-calling.webexapis.com/v1/partners/cdrcountbyorg?endTime=YYYY-MM-DDTHH:MM:SS.000Z&startTime=YYYY-MM-DDTHH:MM:SS.000Z&page=2

Records API endpoint

The Records API endpoint is used to query missing call records for specific organizations where discrepancies or missing data were identified using the Reconciliation API.

The Records API returns call records in JSON format, identical to the format described in the Detailed Call History API. The returned payload contains identical fields to the Detailed Call History returned payload. For more information about the fields and their values, see Webex Calling Detailed Call History Report.

The API provides call records that ended 5 minutes prior to the current time. To ensure all call records are made available, we recommend querying the API one hour after your preferred time window.

The Records API endpoint URL uses the following format:

https://analytics-calling.webexapis.com/v1/partners/cdrsbyorg?orgId=zzzzzzzz-yyyy-zzzz-xxxx-yyyyyyyyyyyy&endTime=YYYY-MM-DDTHH:MM:SS.000Z&startTime=YYYY-MM-DDTHH:MM:SS.000Z

API Parameters

  • OrgID (required, string)—The organization ID for which you want to retrieve records. You can obtain organization IDs from the Reconciliation API.
  • startTime (required, string)—The start date and time (UTC) for the first record you want to collect. Ensure that:
    • You format the time as YYYY-MM-DDTHH:MM:SS.mmmZ. For example, 2025-08-15T06:00:00.000Z.
    • The start date and time must not be older than 30 days from the current UTC time.
    • The interval between the startTime and endTime must not exceed 12 hours in a single API request.
  • endTime (required, string)—The end date and time (UTC) for the last record you want to collect. Records are based on report time, which is when the call is done. Ensure that:
    • You format the time as YYYY-MM-DDTHH:MM:SS.mmmZ. For example, 2025-08-15T18:00:00.000Z.
    • The end date and time must be at least 5 minutes before the current UTC time and no older than 30 days.
    • The end date and time must be greater than the startTime.
    • The interval between the startTime and endTime must not exceed 12 hours in a single API request.
  • Max (optional, number)—Limits the maximum number of records per page in the response. Ensure that:
    • The range is from 500 to 5000. The default value is 5000. For example, Max=1000.
    • If the API has more records to return than the specified Max value, then the response is paginated.
    • If a value below 500 is specified, it is automatically adjusted up to 500. If a value above 5000 is specified, it is adjusted down to 5000.

Pagination

To identify whether API responses are paginated, check the response headers for a Link header. If a next link is present in the Link header, extract it and use the startTimeForNextFetch value to request the next set of records. If there is no next link, then all reports for the selected time range are collected.

API requests for subsequent pages can be made immediately, but must be rate limited to a maximum of 10 paginated requests per minute, per token scope.

For example, if the initial API request is:

https://analytics-calling.webexapis.com/v1/partners/cdrsbyorg?orgId=zzzzzzzz-yyyy-zzzz-xxxx-yyyyyyyyyyyy&endTime=2025-08-15T18:00:00.000Z&startTime=2025-08-15T06:00:00.000Z&Max=5000

then the Link header in the response is:

<https://analytics-calling.webexapis.com/v1/partners/cdrsbyorg?orgId=zzzzzzzz-yyyy-zzzz-xxxx-yyyyyyyyyyyy&endTime=2025-08-15T18:00:00.000Z&startTime=2025-08-15T06:00:00.000Z&startTimeForNextFetch=2025-08-15T09:30:00.000Z&totalCount=20000&Max=5000>; rel="next"

Other possible link values include rel="first" and rel="prev" for the first and previous pages, respectively.

Pagination for this API follows the RFC5988 (Web Linking) standard. For more information, see REST API Basics.

Partner reports/templates API

You can generate and download reports available in Partner Hub using the Partner Reports APIs. For more information, see the partner report/templates.

Partners can also access and download multiple reports directly from Partner Hub. For more information, see Partner Hub reports.

Was this article helpful?
Was this article helpful?