LazyApp’s API limit
Requests are limited per API key, at a ceiling set by the workspace’s plan. Capacity uses a fixed one-minute window.
The ceiling follows the plan, not the key’s mode, so a test key on a Pro workspace gets 1,000 too. A platform customer’s workspace uses its platform’s plan. Live keys need Pro in the first place: below Pro, a live key gets
402 plan_limit_reached before the rate limit applies. An account that was given a custom ceiling keeps it.
Every response tells you where you stand:
429 with a Retry-After header (seconds to wait). Back off and retry — always with an Idempotency-Key, so a retry cannot double-send.
30 failed auth attempts per minute by default), so failed authentication cannot consume a valid key’s budget.
POST /v1/otp and POST /v1/otp/verify each have their own per-key limiter on top of the general /v1 limit: 60 sends and 120 verifications a minute by default. They are counted separately, so a busy sign-in page is not throttled by its own verifications. Abuse is held back per recipient instead (see Verify).
Need a higher ceiling? Email support@lazyapp.in with your expected peak.
Send velocity (abuse guards)
Independent of HTTP rate limits, LazyApp refuses sends that look abusive before they reach Meta — protecting your number’s quality rating:
A free-form reply inside an open customer service window counts against the message the contact just sent, not the hourly cap, so a shop or booking bot can keep answering for as long as the contact keeps writing. Each new message from the contact allows 10 more replies. Templates, and sends outside a window, always count toward the hourly cap.
These return
422 with code, not 429. Slow down, fix bad recipients, or contact support to raise a ceiling. See Errors.
Meta’s messaging limit
Distinct, and usually the one that constrains you. Meta caps how many unique users a number may message in 24 hours, and raises the tier as you demonstrate good quality: 1K, 10K, 100K, then unlimited. LazyApp paces broadcasts to your current tier rather than firing everything and collecting failures.GET /v1/capabilities reports the tier and the number’s quality rating — that is LazyApp’s equivalent of an “account health” check.
Writing a client that behaves
5xx. Without it, a fleet of workers that hit an outage together will retry together and hit it again.
Tips
- Prefer webhooks over polling for delivery status.
- Use cursor pagination instead of refetching large lists.
- Cache
GET /v1/capabilitiesfor a few minutes. - One well-scoped key is enough for throughput; extra keys are for isolation.