Skip to main content
LazyApp is one WhatsApp API for developers, SaaS platforms, and businesses: send messages and templates, receive signed webhooks, run OTP verify, broadcasts, and flows — and white-label the same platform for your own customers. This page takes you from API key to a confirmed send — about five minutes. Base URL: https://lazyapp.in
Building a product where your users connect their WhatsApp numbers? The send loop below is the same, but you’ll want one workspace per platform customer, scoped keys, and webhook routing — start at the platform guide after your first message.

Authentication

All API requests require an API key as a Bearer token. There is no official SDK yet — every example below is plain HTTP.

Get your API key

  1. Sign up or log in
  2. Open Settings → API keys
  3. Click Create API key
  4. Copy the key immediately — you won’t be able to see it again
Use a sk_test_ key while you build. Test keys never reach a real phone, and they are free: test mode is never plan-limited. A sk_live_ key needs the Pro plan and returns 402 plan_limit_reached without it. See Plans and limits.

Set up the client

Key format: sk_test_ or sk_live_ plus 40 characters. Keys are stored as SHA-256 hashes — they’re only shown once at creation. Security tips: Use environment variables, create separate keys per app, grant the narrowest scopes, and rotate periodically. See Authentication.
Never put a key in frontend code. If you need LazyApp in a browser, see embedded components.

Key concepts

  • Workspace — Your team tenant. Your API key belongs to exactly one workspace; you never pass a workspace id.
  • Mode — live or test, taken from the key prefix. Test never reaches a real phone. Data in the two modes never mixes.
  • Connection — A WhatsApp Business Account plus its phone numbers inside the workspace.
  • Message — Anything you send or receive. Addressed by a stable uuid.
  • Webhook — How LazyApp pushes delivery, reads, replies, and template status to you.
IDs in this API are UUIDs (like 9f8b1c2d-4e5f-4a6b-8c7d-0e1f2a3b4c5d). Each step below returns what the next step needs.

Step 1: Confirm a connection

You need at least one WhatsApp connection on the workspace. Claim the free LazyApp sandbox number in test mode, or connect your own number in the console (that needs a plan). Then list what you have:
Most sends use the default connection automatically. Pass phone_number_id or connection_uuid only when you have several. See Capabilities.

Step 2: Send your first message

A 201 means LazyApp accepted and sent it:
Save the uuid — you need it for the next step.
A free-form text message only reaches someone inside the 24-hour customer-service window — after they message you. Outside it, send an approved template instead. LazyApp enforces this server-side, so a send outside the window fails with a clear error rather than silently vanishing.

Step 3: Confirm it worked

Fetch the message back — its status tells you where it is in the pipeline:
status moves through queued → sent → delivered → read (or played / failed). You’ll also see the message in the console. Prefer webhooks for production instead of polling. That’s the whole loop — connection, send, confirmation. Everything else is variations on this.

One endpoint, every send mode

The same POST /v1/messages call covers immediate sends, scheduling, and every message type:
Message types, media, reactions, and quoting are covered in Messages.

Step 4: Receive status on a webhook

Register an endpoint so delivery and reads push to you:
The response includes a signing secret, shown once. Use it to verify every delivery before you trust the body. Leave subscribed_events out to receive everything.

Beyond messaging

Sending is the entry point. The same API key opens the rest of WhatsApp on LazyApp.

Send a template outside the window

Send an OTP

See Verify for managed vs delivery-only mode.

Explore the rest

Messages

Text, media, interactive, reactions, and scheduling

Templates

Create, submit for Meta review, and sync status

Webhooks

Signed delivery for messages, templates, and more

Broadcasts

Template sends to a segment, with quiet hours

Verify

OTPs with fraud controls, managed or delivery-only

Platforms

One workspace per customer, setup links, scoped keys

What’s next?

Go live

Swap sk_test_ for sk_live_. Nothing else changes.

Idempotency

Make every write safe to retry

Errors

Status codes and which ones are worth retrying

API reference

Every endpoint, with a request playground
Going to production? Read rate limits, idempotency, error handling, and pricing. Building for your users? Start at Platforms.