WhatsApp API / Migration field guide
WhatsApp Graph API v24 to v25: An Evidence-Based Migration Checklist
A version change should begin with a documented difference and a reversible test plan. This guide preserves the v24-to-v25 migration question, but the current v25 changelog could not be retrieved on 29 September 2026. Exact lifecycle dates, feature changes and account rollout remain unconfirmed; use the checklist to gather evidence before scheduling a production change.
- Published
- Reading time
- 8 min
- Attribution
- Pending

In this guide
- Establish version support before setting a deadline
- Inventory the integration and customer workflow
- Build a supported comparison instead of a feature forecast
- Prepare identity mapping without assuming universal BSUID
- Capacity and portfolio pacing remain account checks
- Evaluate Flows, rich media and AI by their own contracts
- Keep migration pricing separate from message permission
- Token expiry and revocation are separate failure paths
- Reconcile delivery events rather than acceptance alone
- Pagination, template status and bounded retries
- Ecommerce, finance and healthcare need different safeguards
- Use evidence gates and a reversible pilot
- Frequently asked questions
Part 01
Establish version support before setting a deadline
Record your current version, the proposed target and the provider’s supported migration path. Open the target changelog and relevant product documentation, then separate breaking changes from optional features and account-specific rollout. A general Graph version announcement does not establish that each WhatsApp feature, identifier or marketing API change belongs to that version.
The earlier guide called Cloud consolidation, BSUID, quotas, AI models and pricing one mandatory v25 transition. Those combined claims are held until supported individually. Inaccessible documentation is a reason to leave the change pending, not evidence that v25 is unavailable or that migration can be postponed indefinitely.
This route retains a useful planning explanation while current version claims are unresolved. Check Meta’s official lifecycle notice before relying on a deadline; the old October 2025 on-premises assertion is not confirmation of your installation’s status.
Further reading
Part 02
Inventory the integration and customer workflow
List the API calls your application actually makes, configured version strings, webhook subscriptions, template management, media handling, interactive payloads, permissions and upstream/downstream integrations. Include the operator interface and scheduled jobs, not only the public send endpoint. A change in event shape can affect reporting even when sending still works.
Record which fields are required by your CRM, how recipient identity is joined, what status evidence is stored and how duplicate events are handled. Identify dependencies owned by another team or provider. Keep the current configuration and a tested rollback/recovery plan; do not delete or re-register a working sender as a shortcut.
- Assign a responsible owner to each endpoint and event consumer.
- Save the current contract, configuration and sanitized examples.
- Map each documented target change to the actual consumers it affects.
- Rehearse missing fields, duplicates, ordering and rejected requests with synthetic data.
- Approve a limited pilot and recovery criteria before production traffic.
Part 03
Build a supported comparison instead of a feature forecast
Compare versions using the exact product documentation and account capability you can verify. If no supported difference is known for a row, mark it pending rather than treating a product announcement as a breaking API change. Keep the original evidence URL and check date with each decision.
A Cloud-hosted service can reduce infrastructure responsibilities, but does not remove integration, permissions, queue, monitoring or incident work. Neither a version label nor migration establishes a throughput gain, instant rollout, universal feature availability or a fixed hardware saving.
Version-by-version proof worksheet — fill from current documentation
Scroll sideways to see every column →
| Area | Current contract to record | Target evidence required |
|---|---|---|
| Identifiers | Fields and CRM matching rule | Documented field/scope and rollout |
| Sending and limits | Recipient/MPS/pacing controls | Actual account limits; not inferred from version |
| Templates and media | Supported shape, status and limits | Documented changes and approved examples |
| Interactive journeys | Configured Flows/buttons/catalog path | Feature/region/account support separately |
| Infrastructure lifecycle | Actual installation/provider path | Applicable current support and migration notice |
| Price and category | Effective billing evidence | Pricing policy independent of Graph version |
Part 04
Prepare identity mapping without assuming universal BSUID
Treat an external recipient value as opaque and preserve its source, scope and original event reference. Use a separate internal customer key so a format change does not rewrite every order or support case. A phone number, username and business-scoped identifier are different kinds of evidence; a username alone is not permission to disclose a ledger.
The old guide asserted null wa_id, a 30-day phone visibility period and permanent Contact Book pairs. Those API contracts are unconfirmed. Do not coerce an absent phone number into a dummy number or join two records from similar names. Route ambiguous mappings to a review queue and preserve enough provenance to reverse a mistaken join.
Rehearse unknown, missing and multiple identifiers using synthetic events. Confirm the provider-defined namespace and business scope before linking a new identifier to an existing customer. A scoped identifier does not by itself certify GDPR, CCPA or another privacy obligation.
Further reading
Part 05
Capacity and portfolio pacing remain account checks
Throughput in messages per second is separate from recipient messaging limits, template pacing and quality restrictions. Standard and hybrid limits must be checked for the actual account; no fixed MPS or universal upgrade is confirmed here.
A version announcement, business verification or username rollout does not establish a fixed daily recipient baseline. Confirm the current number or portfolio limit, quality and provider upgrade conditions before planning campaigns.
A green/yellow/red label is not a complete sending algorithm. Record the actual status and limits; measure accepted, pending, failed and delivered work separately. Keep a stop rule for the pilot, avoid concurrent duplicate sending paths and do not promise a universal tier removal or upgrade.
Part 06
Evaluate Flows, rich media and AI by their own contracts
An appointment form, product-choice journey or FAQ assistant may be a useful workflow. Confirm the relevant feature, payload, message category, media restriction, account and region independently. Do not schedule a migration on the assumption that v25 introduces a specific carousel size, file limit or mandatory Llama model.
The previous 60% drop-off claim, autonomous scoring and automatic CRM personalization are not verified results. Define the task, source freshness, authorized customer mapping and human recovery. Test a wrong order reference and an unavailable data source before testing the happy path. A retrieval system can still return an incorrect or unauthorized answer.
In-chat forms, advertising entries and payments have separate prerequisites. Completing a form does not grant marketing permission or authorize a payment. Review the applicable AI terms and data disclosures; the account/API version is not a compliance certificate.
Part 07
Keep migration pricing separate from message permission
A customer message opens or resets the 24-hour reply window. Outside it, an approved template is needed. Permission to use a message format does not determine its price; confirm the effective category, allowance and account conditions separately.
Eligible Click-to-WhatsApp ad entry on Android or iOS can open a free-entry window when the business replies within the customer-service window. The window starts with that response and can last up to 7 days, subject to Meta’s actual eligibility and expiry. During that window, Marketing, Utility, Authentication and Service deliveries are free for that business phone number/customer pair across messaging accounts. An ad click alone or desktop/web entry does not establish this exemption. Confirm the actual window before excluding deliveries.
Use the accepted billing guide for market, category, currency, effective period, tiers and reconciliation. A version migration does not create a free category, retroactive discount or pricing entitlement. Budget platform/integration/setup/tax components separately and retain unresolved billing evidence as unresolved.
A status of accepted records request handling, not final delivery or invoice classification. Keep message references and correlate later delivery/billing evidence. Mixed transactional/promotional intent needs category review; this guide does not declare an automatic reclassification formula.
Further reading
Part 08
Token expiry and revocation are separate failure paths
A system-user label does not mean permanent validity. Record how the credential was issued, token type, app and subject, expiry setting or reported expiry, permissions, asset assignment and the responsible owner. A configured no-expiry value, if offered for that token type, addresses scheduled expiry; it must not be interpreted as immunity from revocation or loss of access.
Check the current provider rules for invalidation when credentials are revoked, the issuing user/system user or app changes, permissions/assets are removed, or security/account actions occur. Exact lifetimes and type-specific invalidation conditions need the applicable token documentation and approved account evidence. Those pages were inaccessible during this check; no working credential or fixed duration is verified here.
Use a secret store and least necessary permissions. Rehearse an expired, revoked and insufficient-permission response using synthetic fixtures. Distinguish authentication failure from a sending restriction, stop retry loops and follow a controlled reissue/rotation procedure. Never place an access token in a public example, log, query string or help request.
Credential operational record — no secret values
| Field | Record or verify |
|---|---|
| Issuance | Token type, subject, app and issuing owner |
| Expiry | Actual setting/reported expiry; refresh responsibility |
| Access | Required permissions and intended asset assignments |
| Invalidation | Current type-specific revocation and security rules |
| Recovery | Alert, pause, controlled reissue and dependency checks |
Part 09
Reconcile delivery events rather than acceptance alone
Verify the webhook signature against the configured provider contract before processing. Acknowledge valid events promptly using a reliable processing design; if your system promises durable handling, persist before acknowledging according to that design. The parsing sketch below is not a complete deployed handler and does not implement signature validation, persistence, authentication or sending.
A payload can contain multiple entries and changes. Parse defensively, validate the documented shape and correlate statuses with the stored message ID and sender scope. Do not assume array indexing, a status order or that one accepted request produces one event. Preserve unknown values for review instead of marking every unmatched message delivered.
// After verified signature and documented payload validation.
// Persist/idempotency/acknowledgement are separate design work.
for (const entry of payload.entry ?? []) {
for (const change of entry.changes ?? []) {
for (const status of change.value?.statuses ?? []) {
if (typeof status.id !== "string") continue;
// Correlate with sender scope and stored message reference.
reviewStatus(status.id, status.status, status.timestamp);
}
}
}
// Unknown or missing status is not proof of delivery.Part 10
Pagination, template status and bounded retries
Treat a pagination cursor as an opaque continuation for the documented query. Do not construct a replacement cursor, reuse it across unrelated filters or assume it is valid forever. If the provider rejects a saved cursor, follow its current restart/recovery guidance and deduplicate already collected records.
Separate transient transport/rate errors from invalid credentials, malformed requests and policy restrictions. Use the current error contract, bounded retries and appropriate delay; preserve enough context to investigate a final failure. Template approval and delivery status are different events. Confirm supported subscriptions and reconcile status rather than inferring approval from a successful list call.
Part 11
Ecommerce, finance and healthcare need different safeguards
For ecommerce, reconcile order/customer mapping, product availability, fulfillment source and payment confirmation. A message delivery or button click is not an order paid or a parcel delivered. For finance, define what identity check authorizes each disclosure; do not reveal a balance merely because a new identifier arrives.
For healthcare, obtain appropriate legal, privacy and clinical review before handling sensitive information. This guide does not approve diagnostic-report transfer, symptom triage or autonomous advice. The earlier sector gains and file-size promises remain unverified; evaluate the intended task and relevant feature contract separately.
Part 12
Use evidence gates and a reversible pilot
Choose one permitted workflow and a small approved cohort once the target contract is documented. Compare expected and observed requests/events, operator outcomes, failures and billing evidence. Keep a rollback/recovery owner and a clear stop criterion; account/provider changes may need forward recovery rather than a simple code rollback.
Migration decision map
Evidence before a limited pilot
A version label does not establish feature support. Keep the current contract and recovery route in view.

Document
Record the current integration and the supported target contract.
Rehearse
Use synthetic events to check the consumers a change could affect.
Recover
Set stop and rollback criteria before the limited pilot.
Discuss the existing integration and specific evidence gaps with the team. An enquiry does not migrate your version, connect a sender or verify BSUID support. No complete migration capability or approval is promised by this article.
Further reading
Questions
Frequently asked questions
Is v25 confirmed for every WhatsApp account?
No universal rollout is established here. Obtain the current changelog, lifecycle notice and relevant account/product support before selecting a target or deadline.
Does BSUID replace every phone number?
The current API contract could not be retrieved. Plan for source-scoped opaque identifiers and missing fields; do not assume universal replacement, a 30-day mapping window or permanent identity pairs.
Are system-user tokens permanent?
Do not assume permanent validity. Check actual issuance and expiry settings separately from revocation, permissions, asset and security/account conditions. A no-expiry setting is not a guarantee that access cannot be invalidated.
Does an HTTP 200 prove delivery?
It can acknowledge request handling. Correlate the stored message reference with later documented status and billing evidence; keep missing evidence unresolved.
Does migration increase sending limits or remove charges?
No fixed capacity or price follows from a version change. Confirm recipient/MPS/pacing controls and effective category/account billing conditions independently.
Share this guide
If copying is unavailable, select the article link below.
Next reads
Continue reading
WhatsApp API
WhatsApp Usernames in 2026: Reservations, Privacy and API Readiness
Understand Meta’s dated username reservation announcement, account rollout checks and cautious CRM identity planning without assuming universal BSUID support.
Read guide →WhatsApp API
WhatsApp conversation analytics ends 1 November 2026: what to change
Meta is removing the conversation_analytics field on 1 November 2026. Audit old reporting queries and use pricing_analytics for delivered-message cost and volume.
Read guide →WhatsApp API
Cloud API marketing messages end in 2027: the migration dates and checks
Meta is moving WhatsApp marketing sends from Cloud API to its Marketing Messages API. See the April and October 2027 milestones and a practical migration checklist.
Read guide →WhatsApp API
WhatsApp account model in October 2026: what changed for Cloud API teams?
Meta's WhatsApp account split separates phone numbers from templates and billing. Understand the September–October rollout, routing and checks for Cloud API teams.
Read guide →