Skip to main content
Quick reference for media uploads, WhatsApp limits, and failures. Upload mechanics and retention are in Media; HTTP rate caps are in Rate limits.

LazyApp upload limits

LazyApp applies one default ceiling to every upload: 16 MB per file (MEDIA_MAX_SIZE_KB, default 16384). Files are virus-scanned and checked against an allow-list of MIME types. Meta may still refuse a file that passed LazyApp — WhatsApp enforces stricter per-type limits on Graph. When in doubt, follow Meta’s media documentation.
Zernio documents separate caps (for example 5 MB images, 100 MB documents). LazyApp does not split caps by type at upload time — only the single 16 MB default unless your deployment changes MEDIA_MAX_SIZE_KB. Meta’s acceptance rules still apply at send time.

Voice notes

True voice-message UI (waveform bubble) is available from the console inbox composer. Public POST /v1/messages sends audio attachments without a voice flag today. For OPUS .ogg voice notes via API, use the Meta-compat proxy if you need Meta’s audio.voice field.

URL import failures

When LazyApp fetches media_url for you, the URL must be publicly reachable with no auth wall. Meta returns download errors when it cannot fetch bytes — often surfaced as a failed send with a provider error, not a separate LazyApp code.

Messaging limits

Broadcasts pace to your Meta tier rather than firing all recipients at once — see Broadcasts.

Analytics

WhatsApp does not expose post-level engagement analytics (opens, clicks, funnel) through Cloud API. What LazyApp gives you instead: There is no dedicated analytics API.

What you cannot do

Common LazyApp error codes

Stable code values on API refusals before Meta — branch on these, not message text: Full list: Errors.

Common Meta provider codes

When Meta rejects a send, the message row and message.failed webhook carry Meta’s numeric code. LazyApp maps the common ones in the console message detail: LazyApp returns 402 with code: plan_limit_reached for a live key on a plan below Pro, and 422 when a broadcast would go past the month’s live broadcast sends. That is your LazyApp plan, not Meta. See Plans and limits.
Do not copy error-code meanings from other BSP docs blindly. Meta assigns codes precisely — 131026 is undeliverable recipient in LazyApp, while 131047 is the re-engagement / closed-window case. Check the failed message in the console or message.failed webhook payload for the exact code.