How to check Usage & Statistics

Track WhatsApp usage and costs for each client and phone number (channel) through the 360dialog Hub, the Partner API, or webhooks. Usage can be checked regardless of whether the account is on Direct Payment or Partner Payment. Final charges always come from Meta’s monthly invoice.

There are multiple ways to check it:

View usage visually in the 360Dialog Hub

Clients and Partners can see a specific WABA usage in the Funds dashboard. To access it, click in Show details in the specific WABA you wish to use and select Insights on the top menu.

In the Monthly usage graphs, you can see the number of conversations the phone number had and when; it includes all Free and Paid Conversations.

Here, you can also estimate costs for the future through the Approximate charges graph, which shows the estimation of the costs of charges.

Please be aware that the Approximate Charges displayed in the 360Dialog Hub is financially binding in its totality. The precise amount due will be determined by Meta's invoice at the end of the month, which will serve as the authoritative record of charges.

Get usage programmatically per channel via API

Check the status and analysis of message usage separately using the following methods:

Get Channel Usage

Retrieve channel-level pricing analytics for messages delivered within a specific date range. This endpoint is aligned with Meta’s pricing structure and provides granular breakdowns.

GET https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/channels/{channel_id}/info/usage

Overview:

  • Returns current pricing breakdowns for a specific phone number (channel) within a WABA for any messages delivered within a specified date range.

  • Abstracts all Meta-specific complexity, so partners don’t need to implement or maintain their own integration with Meta’s pricing services.

  • Allows partners to proactively monitor pricing without needing direct integration with Meta.

  • Includes MM Lite messaging pricing and statistics

Query parameters

Use the following input parameters to filter and shape the usage data:

Name
Type
Description

start_date*

UNIX Timestamp

The start date in UNIX Timestamp (UTC). Returned data will be equal to or newer than the specified date.

Example: 1672531200

end_date*

UNIX Timestamp

The end date in UNIX Timestamp (UTC). Returned data will be equal to or older than the specified date.

Example: 1672531200

granularity*

string

The granularity by which you would like to retrieve the analytics. One of DAILY, HALF_HOUR, MONTHLY.

countries

list of ISO codes

The countries list for which you would like to retrieve analytics. If not provided, usage data will be returned for all countries you have communicated with.

Example: US, IN, BR

pricing_types

list

Filter by pricing type. Supported values: FREE_CUSTOMER_SERVICE, FREE_ENTRY_POINT, REGULAR.

pricing_categories

list

Filter by pricing type. Supported values: AUTHENTICATION, AUTHENTICATION_INTERNATIONAL, MARKETING, SERVICE, UTILITY, MARKETING_LITE.

metrics

list

Which metrics to include. Defaults to all.

Options: COST, VOLUME.

dimensions

list

Breakdowns you would like to apply to your metrics. If not provided, we return results without any breakdowns. Supported options: PRICING_CATEGORY, PRICING_TYPE, COUNTRY, PHONE, TIER, DIRECTION.

Dimensions explained

  • pricing_category – Message category (e.g., authentication, marketing, utility, MM lite).

  • pricing_type – Message type: regular, free_entry_point (when the conversation is started by the user using CTAs like “Click-to-WhatsApp” or “Facebook WhatsApp CTA”) , or free_customer_service (when the conversation was opened by the user by directly messaging you).

  • country – Destination country of the user.

  • tier - Applicable monthly pricing tier (e.g., 0:750000). More about pricing tiers

Request example

curl --request GET
--url https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/channels/{channel_id}/info/usage?start_date=1704067200&end_date=1752105600&granularity=daily&dimensions=pricing_type&dimensions=pricing_category&dimensions=country&dimensions=tier&dimensions=phone
--header 'Authorization: '
--header 'Content-Type: application/json'

Response example

{
  "id": "WABA_ID",
  "currency": "EUR",
  "pricing_analytics": {
    "data": [
      {
        "data_points": [
          {
            "start": 1749106800,
            "end": 1749193200,
            "country": "IN",
            "tier": "0:750000",
            "pricing_type": "REGULAR",
            "pricing_category": "AUTHENTICATION_INTERNATIONAL",
            "volume": 2,
            "cost": 4.6,
            "phone_number": "15550783881"
          },
          {
            "start": 1748934000,
            "end": 1749020400,
            "country": "US",
            "tier": "0:MAX",
            "pricing_type": "REGULAR",
            "pricing_category": "MARKETING",
            "volume": 1,
            "cost": 10,
            "phone_number": "15550783881"
          },
          {
            "start": 1748934000,
            "end": 1749020400,
            "country": "US",
            "tier": "0:MAX",
            "pricing_type": "REGULAR",
            "pricing_category": "MARKETING_LITE",
            "volume": 1,
            "cost": 10,
            "phone_number": "15550783881"
          },
          {
            "start": 1748847600,
            "end": 1748934000,
            "country": "US",
            "pricing_type": "FREE_ENTRY_POINT",
            "pricing_category": "SERVICE",
            "volume": 6,
            "cost": 0,
            "phone_number": "15550783881"
          }
        ]
      }
    ]
  },
  "call_analytics": {
    "data": [
      {
        "data_points": [
          {
            "start": 1749106800,
            "end": 1749193200,
            "country": "IN",
            "count": 2,
            "cost": 4,
            "phone_number": "15550783881",
            "direction": "BUSINESS_INITIATED"
          }
        ]
      }
    ]
  }
}

Rate Limits:

  • 10 requests/hour per phone number (channel)

  • 200 requests/hour per WABA

This endpoint offers data directly from Meta. Slight discrepancies may occur with existing info/balance endpoints due to varying usage collection and processing schedules.

Get Channel Balance

Use this endpoint to retrieve balance information only for a specific channel. Usage metrics returned by this endpoint are deprecated and will no longer be returned.

GET https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/channels/{channel_id}/info/balance

Path Parameters

Name
Type
Description

partner_id*

string

​ID of the partner

client_id*

string

​ID of the client

channel_id*

string

​ID of the channel

Query Parameters

Name
Type
Description

start_date*

string

The start date in UNIX Timestamp (UTC). Returned data will be equal to or newer than the specified date.

Example: 1672531200

end_date*

string

The end date in UNIX Timestamp (UTC). Returned data will be equal to or older than the specified date.

Example: 1672531200

granularity*

string

The granularity by which you would like to retrieve the analytics. Supported Options: DAY , MONTH

Defaults with MONTH if no value is provided in the request.

app_ids

To get usage accumulated from selected app_ids (e.g. ?app_ids=100,200)

Request example

curl --request GET
--url https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/channels/{channel_id}/info/balance?start_date=1691629200&end_date=1691758799&granularity=day
--header 'Authorization: '
--header 'Content-Type: application/json'

Response example

   {
        "balance": 50.00,
        "currency": "eur",
        "last_renewal": {
          "date": "2023-08-01T00:00:00Z,
          "amount": 20.00
        },
        "bi_price_for_currency_and_client_country": 0.2,
        "ui_price_for_currency_and_client_country": 0.02,
        "estimated_template_cost": 0.03,
        "granularity": "day",
        "usage": [
          {
            "authentication_paid_quantity": 0,
            "authentication_price": 0.0,
            "authentication_quantity": 0,   
            "marketing_paid_quantity": 0,
            "marketing_price": 0.0,
            "marketing_quantity": 0,
            "service_paid_quantity": 0,
            "service_price": 0.0,
            "service_quantity": 0,
            "utility_paid_quantity": 0,
            "utility_price": 0.0,
            "utility_quantity": 0,
            "business_initiated_paid_quantity": 5,
            "business_initiated_price": 1.0,
            "business_initiated_quantity": 5,
            "free_entry_point": 0,
            "free_quantity": 0,
            "free_tier": 0,
            "paid_quantity": 5,
            "period_date": "2023-08-10T00:00:00Z",
            "quantity": 5,
            "total_price": 1.0,
            "user_initiated_paid_quantity": 0,
            "user_initiated_price": 0.00,
            "user_initiated_quantity": 0
          },
          {
            "authentication_paid_quantity": 0,
            "authentication_price": 0.0,
            "authentication_quantity": 0,
            "marketing_paid_quantity": 0,
            "marketing_price": 0.0,
            "marketing_quantity": 0,
            "service_paid_quantity": 0,
            "service_price": 0.0,
            "service_quantity": 0,
            "utility_paid_quantity": 0,
            "utility_price": 0.0,
            "utility_quantity": 0,
            "business_initiated_paid_quantity": 0,
            "business_initiated_price": 0,
            "business_initiated_quantity": 0,
            "free_entry_point": 0,
            "free_quantity": 0,
            "free_tier": 0,
            "paid_quantity": 5,
            "period_date": "2023-08-11T00:00:00Z",
            "quantity": 5,
            "total_price": 0.05,
            "user_initiated_paid_quantity": 5,
            "user_initiated_price": 0.05,
            "user_initiated_quantity": 5
          }
        ]
      }

Get Client Balance

GET https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/info/balance

Path Parameters

Name
Type
Description

client_id*

string

ID of the client

partner_id*

string

ID of the partner

Query Parameters

Name
Type
Description

end_date

UNIX Timestamp

The end date in UNIX Timestamp (UTC). Returned data will be equal to or older than the specified date.

Example: 1672531200

start_date

UNIX Timestamp

The start date in UNIX Timestamp (UTC). Returned data will be equal to or newer than the specified date.

Example: 1672531200

granularity

string

The granularity by which you would like to retrieve the analytics. Supported Options: DAY , MONTH

Defaults with MONTH if no value is provided in the request.

Request example

curl --request GET
--url https://hub.360dialog.io/api/v2/partners/{partner_id}/clients/{client_id}/info/balance
--header 'Authorization: '
--header 'Content-Type: application/json'

Response example

{
        "balance": 50.00,
        "currency": "eur",
        "last_renewal": {
          "date": "2023-08-01T00:00:00Z,
          "amount": 20.00
        },
        "bi_price_for_currency_and_client_country": 0.2,
        "ui_price_for_currency_and_client_country": 0.02,
        "estimated_template_cost": 0.03,
        "granularity": "day",
        "usage": [
          {
            "authentication_paid_quantity": 0,
            "authentication_price": 0.0,
            "authentication_quantity": 0,
            "marketing_paid_quantity": 0,
            "marketing_price": 0.0,
            "marketing_quantity": 0,
            "service_paid_quantity": 0,
            "service_price": 0.0,
            "service_quantity": 0,
            "utility_paid_quantity": 0,
            "utility_price": 0.0,
            "utility_quantity": 0,
            "business_initiated_paid_quantity": 5,
            "business_initiated_price": 1.0,
            "business_initiated_quantity": 5,
            "free_entry_point": 0,
            "free_quantity": 0,
            "free_tier": 0,
            "paid_quantity": 5,
            "period_date": "2023-08-10T00:00:00Z",
            "quantity": 5,
            "total_price": 1.0,
            "user_initiated_paid_quantity": 0,
            "user_initiated_price": 0.00,
            "user_initiated_quantity": 0
          },
          {
            "authentication_paid_quantity": 0,
            "authentication_price": 0.0,
            "authentication_quantity": 0,
            "marketing_paid_quantity": 0,
            "marketing_price": 0.0,
            "marketing_quantity": 0,
            "service_paid_quantity": 0,
            "service_price": 0.0,
            "service_quantity": 0,
            "utility_paid_quantity": 0,
            "utility_price": 0.0,
            "utility_quantity": 0,
            "business_initiated_paid_quantity": 0,
            "business_initiated_price": 0,
            "business_initiated_quantity": 0,
            "free_entry_point": 0,
            "free_quantity": 0,
            "free_tier": 0,
            "paid_quantity": 5,
            "period_date": "2023-08-11T00:00:00Z",
            "quantity": 5,
            "total_price": 0.05,
            "user_initiated_paid_quantity": 5,
            "user_initiated_price": 0.05,
            "user_initiated_quantity": 5
          }
        ]
      }      

Rate Limits:

  • 5 requests per 30 seconds.

Via Webhook

Webhook events include message-delivery information and conversation context. You can build counters to estimate usage in real time based on those objects.

FAQ

1. Why are usage numbers different from my invoice?

Usage data in the Hub and API is based on near-real-time processing. Meta’s invoices are finalized monthly and may include adjustments. Minor differences are expected.

2. Does usage tracking work for both Partner and Direct payment accounts?

Yes. Usage tracking is available regardless of payment method. The only difference is who receives the invoice.

3. What happened to the Get client balance endpoint?

It has been deprecated and will no longer return data after July 1, 2025. Use Get channel balance for balance data and Get channel usage for usage analytics.

4. Can I still see usage per WABA or client?

Yes, but you’ll need to aggregate channel-level results from the Get channel usage endpoint across all channels within the WABA or client.

5. What is the best endpoint to use for billing dashboards?

Always use Get channel usage for accurate and detailed analytics. Combine it with Get channel balance for funds tracking.

6. Why are there different granularity options?

Granularity controls how data is grouped in time: use half_hour for high-resolution analysis, daily for regular monitoring, and monthly for summaries.

7. Are webhooks sufficient to calculate costs?

You can estimate usage from webhooks, but they are not authoritative. Always reconcile against Meta’s monthly invoice for final billing.

Last updated

Was this helpful?