Skip to main content
For the exhaustive schema-derived catalog, see all examples.

What it is

Handle business account review, update, and deletion events, plus phone-number deletion, display-name review, quality, and Business Username updates. Route each payload by its exact event type: account events use whatsappBusinessAccount, while phone-number events use whatsappPhoneNumber.

Before you begin

  • Create a public HTTPS endpoint in your application.
  • Configure a YCloud webhook endpoint for the event types you need.
  • Store the endpoint signing secret securely.
  • Make event processing idempotent.

How it works

YCloud sends an HTTP POST request when the event occurs. Verify the signature, durably record the event, return a 2xx response, and process slow work asynchronously.

Request

The scenarios below show requests delivered to your webhook URL. Treat the event id as the delivery identifier and use type to route the payload.

Response

Return a 2xx status after accepting the event.
For endpoint setup, signature validation, and retry behavior, see Configure webhooks.

Account deletion

Use whatsapp.business_account.deleted to handle a WhatsApp Business Account deletion event. Read whatsappBusinessAccount.id to identify the affected WABA.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

The removal fields appear directly inside whatsappBusinessAccount when available. Known removedReason values include: Preserve unknown reason and initiator values. Deduplicate deliveries by the event id, and tolerate omitted removal fields.

Authentication-International Rate Eligibility

Starting June 1, 2024, we are introducing a new authentication-international rate. This rate will apply in the the following countries:
  • June 1, 2024 – Indonesia (country calling code +62, country code ID)
  • July 1, 2024 – India (country calling code +91, country code IN)
For more information, see Authentication-International Rate Eligibility . A whatsapp.business_account.updated webhook will be triggered if your business is deemed eligible for international rates. The webhook will include start times for each country that has an authentication-international rate.

Request

Response

Acknowledge the delivery after durably accepting the event.
If a message is billed at the authentication-international rate, the whatsappMessage.pricingCategory in whatsapp.message.updated webhooks will be set to authentication_international. Here is an example:

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Primary Business Location Update

Your primary business location is the country where your business is based. It will appear in the Business Manager under the Primary Business Location field starting May 1, 2024. If Meta is able to determine the country where your business is based, we will trigger an whatsapp.business_account.updated webhook with the country’s two-digit code. Here is an example:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Phone-number registration limit update

Meta sends a business capability update for a WABA when the corresponding Business Portfolio or WABA phone-number registration limit changes. YCloud delivers it as whatsapp.business_account.updated with updateEvent=BUSINESS_CAPABILITY_UPDATE. The webhook is WABA-level: whatsappBusinessAccount.id is the WABA ID from the Meta webhook entry. Meta currently reports maxPhoneNumbersPerBusiness and maxPhoneNumbersPerWaba in separate updates. Do not treat them as mutually exclusive: process each field independently and accept both if a future update includes them together. A value of 0 is valid. Here is an example of a WABA phone-number limit update:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and update only the limit field included in the payload.

Account violation

When you receive a whatsapp.business_account.updated event with whatsappBusinessAccount.updateEvent set to ACCOUNT_VIOLATION, inspect whatsappBusinessAccount.violationType to identify the reported policy violation. See Meta’s Policy enforcement violations for violation types and descriptions. Meta may update this list over time. Here is an example:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Account Restriction

If Business Accounts repeatedly violate the WhatsApp Business Terms of Service or high-risk policy categories such as sending spam, adult content, sale of alcohol and tobacco, drugs, gambling and unsafe supplements, they may start seeing messaging restrictions that gradually increase in duration. For Utility Direct Send, see Direct Send notifications for a YCloud ACCOUNT_RESTRICTION payload. See Meta’s Webhook for account restriction for Direct Send-specific violation types and restriction details. Here is an example:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Utility Direct Send restriction

You receive whatsapp.business_account.updated when Meta restricts Utility Direct Send after repeated category misuse. This example shows a seven-day restriction.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Use whatsappBusinessAccount.id to identify the affected WABA and pause its Utility Direct Send workflow. Read violationType for the reason, restrictions[].restrictionType for the affected capability, and restrictions[].expiration for the expiry when supplied. A successful review of one template does not automatically lift an account-level restriction. See Direct Send restrictions and notifications.

Account Disabled

WhatsApp Business Accounts may be disabled if the business does not make changes after multiple warnings and feature limits or blocks. Here is an example:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Account Reinstate

You can appeal the WhatsApp Business Account ban decision to reinstate it. Once approved, the account review status changes to APPROVED. Here is an example:

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Route the event by type, deduplicate it by id, and move slow or failure-prone work to an asynchronous processor.

Business account review

Use whatsapp.business_account.reviewed when a WhatsApp Business Account has been reviewed.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Identify the WABA with id. Read decision for the review decision (APPROVED or REJECTED) and accountReviewStatus for the account review status when supplied. Do not route this event as whatsapp.business_account.updated.

Phone number deletion

Use whatsapp.phone_number.deleted when a WhatsApp business phone number is deleted.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Use whatsappPhoneNumber.id to identify the deleted phone number and wabaId to associate it with its account. This is a phone-number event; do not treat it as deletion of the entire WABA.

Phone number display-name review

Use whatsapp.phone_number.name_updated when a business phone number display name is approved or rejected.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Read decision and the supplied name-status fields. newNameStatus describes the new display-name request, requestedVerifiedName identifies the last requested name, and rejectionReason describes a rejection when present. Display-name review is separate from a Business Username update.

Phone number quality update

Use whatsapp.phone_number.quality_updated for changes to a business phone number’s quality-related status.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

Read qualityRating (GREEN, YELLOW, or RED) and qualityUpdateEvent to understand the update. messagingLimit is the phone-number tier; whatsappBusinessManagerMessagingLimit is the owning business portfolio’s limit. Keep these fields separate and update only the values supplied in the event.

Business Username activated

Use whatsapp.phone_number.business_username_updated to synchronize a phone number’s Business Username.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

businessUsername is the active username without a leading @. Read businessUsernameStatus and businessUsernameUpdatedAt with the phone-number id. Do not confuse this value with the verified display name.

Business Username request reserved

An active Business Username can remain in use while a replacement request is reserved.

Request

Response

Acknowledge the delivery after durably accepting the event.

Explanation

In this example, businessUsername remains acme.support while requestedBusinessUsername is acme.help. The reserved status describes the pending request, not activation of the replacement. Accept the legacy pending_review value when reading older events; new writes use reserved.