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
Separate technical document stacks, magnifier and reversible path marker on a desk
Illustration: compare documented version contracts and retain a recovery path before migration.

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.

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.

  1. Assign a responsible owner to each endpoint and event consumer.
  2. Save the current contract, configuration and sanitized examples.
  3. Map each documented target change to the actual consumers it affects.
  4. Rehearse missing fields, duplicates, ordering and rejected requests with synthetic data.
  5. 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 →

Version-by-version proof worksheet — fill from current documentation
AreaCurrent contract to recordTarget evidence required
IdentifiersFields and CRM matching ruleDocumented field/scope and rollout
Sending and limitsRecipient/MPS/pacing controlsActual account limits; not inferred from version
Templates and mediaSupported shape, status and limitsDocumented changes and approved examples
Interactive journeysConfigured Flows/buttons/catalog pathFeature/region/account support separately
Infrastructure lifecycleActual installation/provider pathApplicable current support and migration notice
Price and categoryEffective billing evidencePricing 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.

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.

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

Credential operational record — no secret values
FieldRecord or verify
IssuanceToken type, subject, app and issuing owner
ExpiryActual setting/reported expiry; refresh responsibility
AccessRequired permissions and intended asset assignments
InvalidationCurrent type-specific revocation and security rules
RecoveryAlert, 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.

Synthetic parsing sketch — no credential, request or provider execution
// 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.

Abstract document, test, pilot and recovery checkpoints connected by a return path
Illustration: a limited pilot follows documented changes and synthetic checks, with recovery criteria set in advance.

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.

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.

Article link: https://whats91.com/blog/whatsapp-graph-api-v24-to-v25-transition-guide