Skip to main content
Every plan is a flat price that pays LazyApp. Messages are billed separately by Meta, at Meta’s rates, and LazyApp adds 0% to them. See Pricing for how the two bills fit together.

Plans

  • Starter gives a small team one number with the inbox, templates, contacts, quick replies and QR links.
  • Growth adds automations, WhatsApp Flows, payments and your catalog.
  • Pro adds more numbers, a bigger team, the API with live keys, and webhooks.
Prices are in rupees. Plans are always billed in INR.

Add-ons

Buy more room on any plan without moving up a plan: Add-ons sit on the same subscription as your plan, so they renew on the same date and at the same interval.

Yearly billing

A yearly plan costs ten months’ price: two months free. Add-ons on a yearly plan are yearly too.

GST

18% GST is added to plan and add-on prices once LazyApp’s GSTIN is registered. Until then no tax is added. The console shows ”+ 18% GST” next to prices only when it applies, so the price you see is the price you pay. Add your own GSTIN in Settings → Billing to have it printed on your invoices.

No free plan

There is no free plan. The shared test number is free in test mode, with every feature on, so you can build and test your integration before you pay. Connecting your own WhatsApp number needs a plan.

Refund

Your first plan payment is refundable in full if you ask within 7 days. The Billing page shows this while your next plan payment would be your first.

Payment

You pay by card through Stripe. Choosing a plan opens Stripe Checkout. After that, Manage billing opens the Stripe Customer Portal, where you change your card, download invoices and cancel. Stripe’s invoice, with its hosted page and PDF, is your invoice of record. See How billing works.

Feature gating

LazyApp enforces plans on the server, so the same limits apply in the console and through the API. How each limit is counted:
  • Numbers count your own connected WhatsApp numbers. The shared test number does not count.
  • Members count people in the workspace plus invitations still waiting for an answer. An invitation holds a seat until it is accepted or expires.
  • Broadcast sends count Live broadcast recipients queued or sent in the calendar month (UTC). The count resets on the 1st. LazyApp checks the count when you start a broadcast and refuses one that would go past it. A broadcast that is already running pauses when the month’s sends are used up, and the workspace owner is told. Messages you send one at a time, replies and automations do not count.
  • Features are checked when you create or change something. Opening, pausing, archiving and deleting stay open, so after a downgrade you can still see and tidy up what you built on a bigger plan.

Test mode is never limited

Test mode uses the shared test number, and nothing in it is limited. Test API keys work on every plan, including with no plan at all. Build against test mode first, then choose the plan that fits what you need in Live.

In the console

When you reach a limit in the console, LazyApp shows a message that says what to change, with an Upgrade or Buy add-on button that opens Billing.

Plan limit reached

Through the API, a live key on a plan without the API returns HTTP 402 with the code plan_limit_reached. The body uses the standard error shape: a message written for a person and a stable code to branch on. That is a live key on a workspace below Pro. Every request with that key is refused:
Other limits are refused with 422 and a plain message that names the limit, not with plan_limit_reached: a broadcast with more recipients than the month’s sends left, or connecting a number past your plan’s numbers. On Pro you can still reach those two. Branch on code, not on message. The message tells a person what to change in Billing and can be reworded. 402 with plan_limit_reached is not worth retrying: it keeps failing until the plan changes. Show the message to the person who can change the plan. Test keys never get plan_limit_reached.