No Storage
Updated: Dec 1, 2025 “No Storage” is a custom configuration of Cloud API local storage, where the data in-transit is kept for up to an hour in Meta data centers and the data is not persisted at rest (that is to say, not in Meta data centers nor in AWS In-Country stores). Outgoing/incoming messages are stored for a maximum of 1 hour in Meta data centers. Outgoing/incoming media blobs are stored for a maximum of 1 hour in Meta data centers. You can pass a custom time-to-live (TTL) — from 1 hour to 30 days — when uploading media to override the 1 hour expiration (particularly useful for marketing campaigns which reuse the same media)
Limitations
When the No Storage feature is enabled, message content is not stored at rest for 30 days as is typical with Cloud API. This introduces the following limitations, which can put a small fraction of your total messaging volume at risk of non-delivery. Message decryption failures — If a message fails to decrypt on the consumer side, Cloud API can only retry sending the message within a 1-hour TTL window. After this 1-hour window, Cloud API cannot retry the message. You will receive an error webhook indicating the failure. See: Retry Receipt Failures. Webhook delivery failures — Normally, Cloud API retries undelivered webhooks (such as incoming messages or receipts) for up to 7 days. With No Storage enabled, webhook retries are limited to 1 hour. If your webhook server is unavailable beyond this window, the webhook (including incoming messages, receipts, etc.) will be permanently lost. See: Failure to Deliver Webhooks. Incoming media messages — Media attached to incoming messages will be available for download for up to 1 hour. After 1 hour, the media is permanently deleted and cannot be retrieved.Enable No Storage
Request syntax (v21.0 or newer)
Enabling the feature is done before registration by calling the POST /<BUSINESS_PHONE_NUMBER_ID>/settings endpoint.60 value is allowed for the retention_minutes parameter, as it is the only retention duration we are supporting.
Request syntax (v20.0 or older)
Enabling the feature is done within the POST /<BUSINESS_PHONE_NUMBER_ID>/register registration request.meta_store_retention_minutes cannot be used alongside with data_localization_region.
Disable No Storage
To disable No Storage, you must de-register the bsuiness phone number using the POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/deregister endpoint, then register the number again without themeta_store_retention_minutes parameter.
Example deregister syntax
Override outgoing media TTL
The default 1-hour TTL for No Storage-enabled business phone numbers also applies to media uploaded on the number. If you want to override the default 1-hour TTL, you can include the newttl_minutes parameter when uploading media.
Example syntax
ttl_minutes range is from 1 hour (60) to 30 days (43200).
The API currently does not return the expiration date of the media in the response API.
Error webhooks
Retry receipt failures
In the case of WhatsApp client decryption failures, we will stop attempting to deliver an undelivared message from a No Storage-enabled number once the TTL is reached. In these cases, a status messages webhook is triggered with error code131036:
Example payload
Failure to deliver webhooks
By default, Cloud API retries for up to 7 days to deliver incoming messages webhooks. For No Storage-enabled business phone numbers, if we fail to deliver an incoming message webhook, we will drop it and instead send an errors messages webhook with error code131035:

